简单dp
dp[ i ][ j ]=dp[ i-1 ][ j ](放一个H得到dp[ i ][ j ])+dp[ i ][ j-1 ]( 放一个D得到dp[ i ][ j ]);
注意初始化 为dp[ i ][ 0 ]=1;!!!!!!!
View Code
1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 24; 4 typedef __int64 int64; 5 int64 dp[ maxn ][ maxn ]; 6 7 void init(){ 8 for( int i=0;i<=20;i++ ) 9 dp[i][0]=1; 10 dp[ 1 ][ 1 ]=1; 11 for( int i=2;i<=20;i++ ){ 12 for( int j=1;j<=i;j++ ){ 13 if( i==j ){ 14 dp[i][j]=dp[i][j-1]; 15 } 16 else{ 17 dp[i][j]=dp[i-1][j]+dp[i][j-1]; 18 } 19 } 20 } 21 } 22 int main(){ 23 init(); 24 int n,m; 25 while( scanf("%d%d",&n,&m)==2 ){ 26 printf("%I64d\n",dp[n][m]); 27 } 28 return 0; 29 }