poj 1579 Function Run Fun(DP:水题)
2014-08-25 20:56
381 查看
既然已经给出了递推公式以及边界条件
那么就完全没必要用递归了
直接依次递推即可
代码如下:
那么就完全没必要用递归了
直接依次递推即可
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> #define MAXN 22 #define LL long long using namespace std; int dp[MAXN][MAXN][MAXN]; void init() { memset(dp, -1, sizeof(dp)); for(int i=0; i<=20; ++i) { for(int j=0; j<=20; ++j) { dp[0][i][j] = dp[i][0][j] = dp[i][j][0] = 1;//看起来比较简洁 } } for(int i=1; i<=20; ++i) { for(int j=1; j<=20; ++j) { for(int k=1; k<=20; ++k) { if(dp[i][j][k] != -1) continue; if(i<j && j<k) dp[i][j][k] = dp[i][j][k-1]+dp[i][j-1][k-1]-dp[i][j-1][k]; else 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]; } } } } int main(void) { init(); int a, b, c; while(scanf("%d%d%d", &a, &b, &c)) { if(a==-1 && b==-1 && c==-1) break; if(a<=0 || b<=0 || c<=0) { printf("w(%d, %d, %d) = 1\n", a, b, c); continue; } if(a>20 || b>20 || c>20) { printf("w(%d, %d, %d) = %d\n", a, b, c, dp[20][20][20]); continue; } printf("w(%d, %d, %d) = %d\n", a, b, c, dp[a][b][c]); } return 0; }
相关文章推荐
- 【poj1579】Function Run Fun (动态规划DP递归,记忆化递归)
- PKU1579 Function Run Fun (DP水题)
- poj - 1579 Function Run Fun 【dp】
- POJ 1579 Function Run Fun 记忆化递归
- POJ-1579-Function Run Fun-递归,记忆化搜索
- 【ACM】poj_1579_Function Run Fun_201308121654
- poj 1579 Function Run Fun 递归
- poj 1579 Function Run Fun(记忆化搜索)
- POJ 1579 Function Run Fun 记忆化递归
- poj-1579-Function Run Fun(记忆化搜索)
- (POJ - 1579)Function Run Fun
- POJ 1579/hrbust 1029/哈理工oj 1029 Function Run Fun【记忆化搜索】
- poj 1579 Function Run Fun ( 记忆化搜索 )
- POJ:1579 Function Run Fun(递归转换+打表)
- 记忆化搜索:POJ1579-Function Run Fun(最基础的记忆化搜索)
- POJ1579(Function Run Fun)
- POJ 1579【Function Run Fun】
- POJ 1579 Function Run Fun 记忆化搜索
- POJ 1579 Function Run Fun 记忆化递归
- poj - 1579 - Function Run Fun(记忆化搜索)