hdoj-4055

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int mod=;
const int N=+;
long long sum[N][N];
char str[N];
int main ()
{
// 含义 dp[i][j] 前i个字母 以数字j结尾的排列方式 比如("II")-dp[2][3] 表示 “123”
//递推公式 如果str="I" dp[i][j]=dp[i-1][1]+dp[i-1][2]+...+dp[i-1][j-1];
//str="D" dp[i][j]=dp[i-1][j]+dp[i][j+1]+...+dp[i][i+1]
// 解释比如前i-1个排列 {3 1 4 2 5} 可以加一个 3 前面所有比3大的数加1(这样不会改变前面的增长顺序)
// 变成{4,1,5,2,6,3}
//sum[i][j]=dp[i][1]+dp[i][2]+...dp[i][j];
while (~scanf (" %s",str+)) {
int n=strlen(str+);
sum[][]=;
for (int i=;i<=n;i++) {
for (int j=;j<=i+;j++) {//i+1 因为i个字母表示i+1个数字
sum[i][j]=sum[i][j-];
if (str[i]!='D')
sum[i][j]+=sum[i-][j-];
if (str[i]!='I')
sum[i][j]+=sum[i-][i]-sum[i-][j-]+mod;
sum[i][j]%=mod;
}
}
printf ("%lld\n",sum[n][n+]);
}
return ;
}

hdoj-4489

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
LL dp[][];
LL f (int n,int m) { // f: C(n,m)
LL ans=;
if (m==) return ;
for (int i=n-m+;i<=n;i++)
ans*=i;
for (int i=;i<=m;i++)
ans/=i;
return ans;
}
int main ()
{
dp[][]=dp[][]=;
dp[][]=dp[][]=;// 在前i个数排好基础下排第j个
// dp[i][0] 以下降方式结尾 dp[i][1]以上升方式开始
// 第i个数排在下降方式结尾子序列和以上升方式开始子序列之间
for (int i=;i<=;i++) {
LL tmp=;
for (int j=;j<i;j++)
tmp+=dp[j][]*dp[i--j][]*f(i-,j);
dp[i][]=dp[i][]=tmp/;
}
int T;
scanf ("%d",&T);
while (T--) {
int x,n;
scanf ("%d %d",&x,&n);
if (n==) printf ("%d 1\n",x);// 注意这个特殊情况
else printf ("%d %lld\n",x,*dp[n][]);
}
return ;
}

两道不错的递推dp的更多相关文章

  1. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  2. 递推DP UVA 607 Scheduling Lectures

    题目传送门 题意:教授给学生上课,有n个主题,每个主题有ti时间,上课有两个限制:1. 每个主题只能在一节课内讲完,不能分开在多节课:2. 必须按主题顺序讲,不能打乱.一节课L时间,如果提前下课了,按 ...

  3. poj 2229 【完全背包dp】【递推dp】

    poj 2229 Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 21281   Accepted: 828 ...

  4. Code Force 429B Working out【递推dp】

    Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...

  5. 递推DP URAL 1167 Bicolored Horses

    题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...

  6. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  7. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  8. 递推DP URAL 1119 Metro

    题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...

  9. 递推DP 赛码 1005 Game

    题目传送门 /* 递推DP:官方题解 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩 ...

随机推荐

  1. Linux+Apache+MySQL+PHP配置教程

    有时我们只想搭建LAMP环境做个测试,并不在意目录的和配置是否规范,本教程正是为此想法而写能简单的就不复杂实现最快地搭建LAMP:操作系统为CentOS6.5. 1.安装Apache yum inst ...

  2. CentOS配置教程

    1.配置网卡开机自动启动 查看/etc/sysconfig/network-scripts/ifcfg-eth0的初始内容: cat /etc/sysconfig/network-scripts/if ...

  3. java基础语法运算符

    1.1                算数运算符++.--的使用 在一般情况下,算数运算符不会改变参与计算的变量值.而是在原有变量值不变的情况下,计算出新的值.但是有些操作符会改变参与计算的变量的值, ...

  4. WordDenified.exportedUI

    <mso:cmd app="Word" dt="1" /><mso:customUI xmlns:x1="xuzaAzWord&qu ...

  5. etymon word forget acid acrid acri shap acu=sour act out 1

    1● acid   2● sharp 3● acri 4● acrid acu=sour 酸的,尖酸的     1● act = to do drive   行动    

  6. python django 访问static静态文件

    settings 文件配置: STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)PROJEC ...

  7. php删除文件夹下面所有文件包括(删除文件夹)不删除文件夹

    function deldir($dir) { //先删除目录下的文件: $dh=opendir($dir); while ($file=readdir($dh)) { if($file!=" ...

  8. learning ddr mode register MR3

  9. Java 算法 概念汇总

    编程面试的10大算法概念汇总   以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java ...

  10. redis:集群配置

    一.redis集群相关 1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求. 2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库 ...