HDU 1331 Function Run Fun(递推)
第一次做的时候竟然递归了,而且没有记忆化,这不是犯2吗。。。记忆化依旧TLE了之后,上递推,水过了。
1 #include <stdio.h> 2 #include <string.h> 3 #define N -10000000 4 int dp[21][21][21]; 5 int main() 6 { 7 int a,b,c,i,j,k; 8 for(i = 0;i <= 20;i ++) 9 { 10 for(j = 0;j <= 20;j ++) 11 { 12 dp[0][i][j] = 1; 13 dp[i][0][j] = 1; 14 dp[i][j][0] = 1; 15 } 16 } 17 for(i = 1;i <= 20;i ++) 18 { 19 for(j = 1;j <= 20;j ++) 20 { 21 for(k = 1;k <= 20;k ++) 22 { 23 if(i < j&&j < k) 24 { 25 dp[i][j][k] = dp[i][j][k-1]+dp[i][j-1][k-1]-dp[i][j-1][k]; 26 } 27 else 28 { 29 dp[i][j][k] = dp[i-1][j][k]+dp[i-1][j-1][k]+dp[i-1][j][k-1]-dp[i-1][j-1][k-1]; 30 } 31 } 32 } 33 } 34 while(scanf("%d%d%d",&a,&b,&c)!=EOF) 35 { 36 if(a == -1&&b == -1&&c == -1) break; 37 printf("w(%d, %d, %d) = ",a,b,c); 38 if(a <= 0||b <= 0||c <= 0) 39 printf("1\n"); 40 else if(a > 20||b > 20||c > 20) 41 printf("%d\n",dp[20][20][20]); 42 else 43 printf("%d\n",dp[a][b][c]); 44 } 45 return 0; 46 }