题目链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=2§ionid=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;
}