HDU 1267 下沙的沙子有几粒?

一道很简答的题目,但是看不出来是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 }
View Code
原文地址:https://www.cnblogs.com/cton/p/3437805.html