hdu 1267 下沙的沙子有几粒? (DP)
#include"stdio.h" __int64 dp[22][22]; /*dp[i][j]=dp[i-1][j]+dp[i][j-1], 再加一个H可以放在最前面就有dp[i-1][j]个, 再加一个D放在最后就有dp[i][j-1]个*/ void fun() { int i,j; for(i=0;i<=20;i++) dp[i][0]=1; for(i=0;i<=20;i++) dp[i][1]=i; for(i=1;i<=20;i++) { for(j=1;j<=20;j++) if(i<j) dp[i][j]=0; else dp[i][j]=dp[i-1][j]+dp[i][j-1]; } } int main() { int n,m; fun(); while(scanf("%d%d",&m,&n)!=EOF) printf("%I64d\n",dp[m][n]); return 0; }