一道很简答的题目,但是看不出来是DP啊。渣爆了。
意思是从左到右H的数量要比D多,也就是当出现H<D的个数不是一个字符串。
所以(m,n分别是H,D的个数)
1.m<n时,H一定比D小,构不成条件,此时为0
2.每个m>n的字符串都可以由m-1,n和m,n-1的字符串得到。
3.只写出了转移方程,没有写出m<n的状态限制,不算是自己做出来的,看来不是很理解题意···
1 #include <stdio.h> 2 3 __int64 dp[21][21]; 4 int n , m; 5 6 void dfs() 7 { 8 for(int i=0;i<=20;i++) dp[0][i]=0; 9 for(int i=0;i<=20;i++) dp[i][0]=1; 10 dp[0][0]=0; 11 for(int i=1;i<=20;i++) 12 { 13 for(int j=1;j<=20;j++) 14 { 15 dp[i][j] = i< j ? 0 : dp[i-1][j]+dp[i][j-1]; 16 } 17 } 18 19 } 20 21 int main() 22 { 23 dfs(); 24 while(~scanf("%d%d",&m,&n)) 25 { 26 printf("%I64d ",dp[m][n]); 27 } 28 return 0; 29 }