hdu 1267 下沙的沙子有几粒?

来源:互联网 发布:如何连接网络投影仪 编辑:程序博客网 时间:2024/05/01 23:13

题目链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2&sectionid=3&problemid=9

题目大意:一个字符串只有h和d组成,然后如果对于任意一个h,它之前的d总是不多于它之前的h+1;则称为杭电串串,为一个长度为n的串,有多少种杭电串串;


///////////////////

此题为简单的dp,感觉就不能算dp,就是简单的找递推公式的题;

设a[i][j]表示的是m=i,n=j时满足条件的字符串个数,则a[i][j]=a[i][j-1]+a[i-1][j](i>j);

因为如果第i+j个字符有两种可能h或d,若为h则个数为a[i-1][j],否则为a[i][j-1];


参考代码如下:

#include <iostream>using namespace std;__int64 a[22][22];int m,n;void init(){int i,j;for(i=1;i<=20;i++)a[i][1]=i;for(i=2;i<=20;i++)a[1][i]=0;for(i=2;i<=20;i++)for(j=2;j<=20;j++){if(i<j)a[i][j]=0;else{a[i][j]=a[i][j-1]+a[i-1][j];}}}int main(){init();while(cin>>m>>n){printf("%I64d\n",a[m][n]);}return 0;}