POJ 1579 解法二用动态规划给递归剪枝,减少重复计算。此题一开始没想到用此法耗费了不少时间。
2011-08-21 21:43
295 查看
#include<stdio.h> int num[21][21][21] = {0}; int w(int a,int b,int c) { if (a<=0 || b<=0 || c<=0) return 1; if(a>20 || b>20 || c>20) return w(20,20,20); if(num[a][b][c]) return num[a][b][c]; if(a<b && b<c) return num[a][b][c] = w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c); return num[a][b][c] = w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1); } int main() { int x, y,z ; while(scanf("%d%d%d",&x,&y,&z) != EOF) { if(x==-1 && y==-1 && z==-1) break; printf("w(%d, %d, %d) = %d\n",x, y, z, w(x,y,z)); } return 0; }
相关文章推荐
- 递归优化 POJ1579 记忆化搜索 剪枝 去掉重复计算
- 格子取数问题的动态规划和递归解法之比较
- 记忆化搜索也是递归剪枝的一种,他记录计算过的状态节点如果遇到就爆栈不再深入,防止了重复计算,同时最优性剪枝也有相同的意味
- 动态规划(Dynamic programming,DP),通过把原问题分,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:
- 动态规划:0-1背包问题(使用迭代方法,避免重复计算)
- 动态规划,递归与非递归,FP 之野望,描述与计算
- poj 1579(动态规划初探之记忆化搜索)
- 动态规划之最长公共子串(递归的备忘录写法)
- 研究显示云计算减少了管理安全性的时间和费用
- HUST 1025 Sequence(递归 + 重复计算消除)
- 最大子段和的动态规划解法
- 【算法竞赛入门经典】集合的动态规划;时间优化 例题9-16 UVa1252
- cocos2d-x 减少编译时间/免除重复编译
- 从暴力递归到动态规划的转换(推荐)
- c++中计算运行时间 clock() clock_t 示例:比较递归和非递归数值运算
- POJ 1821 Fence 【DP动态规划】
- 动态规划- Super Jumping! POJ-1087
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 矩阵连乘的动态规划解法
- POJ 1579-Function Run Fun(记忆化搜索-递归)