POJ 1579
1 #include<iostream> 2 #define MAXN 21 3 #define NE -1234567 4 using namespace std; 5 int dp[MAXN][MAXN][MAXN]; 6 7 8 int my_fun(int a,int b,int c) 9 { 10 if(a <= 0 || b<= 0 || c <= 0) 11 { 12 return 1; 13 } 14 else if(a > 20 || b > 20 || c > 20) 15 { 16 if(dp[20][20][20] != NE) 17 { 18 return dp[20][20][20]; 19 } 20 else 21 { 22 dp[20][20][20] = my_fun(20,20,20); 23 return dp[20][20][20]; 24 } 25 } 26 else if(a < b && b < c) 27 { 28 if(dp[a][b][c-1] != NE && dp[a][b-1][c-1] != NE && dp[a][b-1][c] != NE) 29 { 30 return dp[a][b][c-1] + dp[a][b-1][c-1] - dp[a][b-1][c]; 31 } 32 else 33 { 34 dp[a][b][c-1] = my_fun(a,b,c-1); 35 dp[a][b-1][c-1] = my_fun(a,b-1,c-1); 36 dp[a][b-1][c] = my_fun(a,b-1,c); 37 return dp[a][b][c-1] + dp[a][b-1][c-1] - dp[a][b-1][c]; 38 } 39 } 40 else 41 { 42 if(dp[a-1][b][c] != NE && dp[a-1][b-1][c] != NE && dp[a-1][b][c-1] != NE && dp[a-1][b-1][c-1] != NE) 43 { 44 return dp[a-1][b][c] + dp[a-1][b-1][c] + dp[a-1][b][c-1] - dp[a-1][b-1][c-1]; 45 } 46 else 47 { 48 dp[a-1][b][c] = my_fun(a-1,b,c); 49 dp[a-1][b-1][c] = my_fun(a-1,b-1,c); 50 dp[a-1][b][c-1] = my_fun(a-1,b,c-1); 51 dp[a-1][b-1][c-1] = my_fun(a-1,b-1,c-1); 52 return dp[a-1][b][c] + dp[a-1][b-1][c] + dp[a-1][b][c-1] - dp[a-1][b-1][c-1]; 53 } 54 } 55 56 } 57 58 int main() 59 { 60 //freopen("acm.acm","r",stdin); 61 int a; 62 int b; 63 int c; 64 int i; 65 int j; 66 int k; 67 for(i = 0; i < MAXN; ++ i) 68 { 69 for(j = 0; j < MAXN ; ++ j) 70 { 71 for(k = 0; k < MAXN; ++ k) 72 { 73 dp[i][j][k] = NE; 74 } 75 } 76 } 77 while(cin>>a>>b>>c) 78 { 79 if(a == -1 && b == -1 && c == -1) 80 break; 81 cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<my_fun(a,b,c)<<endl; 82 } 83 }
关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。
技术网站地址: vmfor.com