hdu4489(递推)
2016-04-30 17:11
309 查看
链接:点击打开链接
题意:求n个人按照低高低或者高低高的顺序排列种数是多少,看下图
![](http://acm.hdu.edu.cn/data/images/C426-1006-1.jpg)
代码:
题意:求n个人按照低高低或者高低高的顺序排列种数是多少,看下图
![](http://acm.hdu.edu.cn/data/images/C426-1006-1.jpg)
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; long long c[25][25],dp[25][2]; int main(){ //dp[i][0]表示前i个人按照结尾是高低的顺序的种数 long long i,j,n,t,id,sum; //dp[i][1]表示前i个人按照开头是低高的顺序的种数 c[0][0]=1,c[1][0]=c[1][1]=1; for(i=2;i<=20;i++) for(j=0;j<=i;j++){ if(j==0||j==i) c[i][j]=1; else c[i][j]=c[i-1][j]+c[i-1][j-1]; } dp[0][0]=dp[0][1]=1; dp[1][0]=dp[1][1]=1; for(i=2;i<=20;i++){ //第i个人最高,因此选i-1个人结尾是高低,i-j-1 sum=0; //个人是开头是低高,在乘组合数决定选的j个人的 for(j=0;j<i;j++) //种数 sum+=(dp[j][0]*dp[i-j-1][1]*c[i-1][j]); dp[i][0]=dp[i][1]=sum/2; } scanf("%I64d",&t); while(t--){ scanf("%I64d%I64d",&id,&n); if(n==1){ printf("%I64d 1\n",id); continue; } printf("%I64d %I64d\n",id,dp [0]*2); } return 0; }
相关文章推荐
- POJ 3744 Scout YYF I (矩阵相乘+概率DP)
- optparse模块
- java验证自增
- optparse模块
- optparse模块
- Android Binder跨进程与非跨进程的传输异同源码分析
- Shell-批量巡检服务器脚本
- 设计模式:装饰模式(Decorator )
- 安卓实现老虎机抽奖的案例
- SVM核函数
- java中的List和Vector的区别
- Android Studio cannot resolve symbol 'TabLayout'
- android 时间控件的使用
- BZOJ1492: [NOI2007]货币兑换Cash
- Linux内核分析期末总结
- 软件开发模型
- 压缩视频
- 使用struts2的<s>标签出错
- 1029. 旧键盘(20)
- 每天一个linux命令:vmstat