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 }
posted @ 2012-10-05 14:30  Naix_x  阅读(202)  评论(0编辑  收藏  举报