动态规划____数塔 递推方法(以前都是记忆化搜索)
2013-07-02 23:54
423 查看
比较值得说的是 如果脑子里确实有很明确的递推图(注意是图,根据递推式演变来的二维矩阵(也许三维),或者一维的"类"有向图)那么递推写起来快得多。否则还是记忆化搜索保险。
1.但是跟所有动规问题类似,务必注意边界,建议把第一条横边(i = 0 0<j<N ) && 竖边( j = 0 0<i<N ) 单独提取出来赋值。
2.注意边界的同时,更要注意起始点的赋值 map[0][0] = input[0][0]
3.以及输出的结果应该为 map[N-1][N-1] 而非 map
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1147
1.但是跟所有动规问题类似,务必注意边界,建议把第一条横边(i = 0 0<j<N ) && 竖边( j = 0 0<i<N ) 单独提取出来赋值。
2.注意边界的同时,更要注意起始点的赋值 map[0][0] = input[0][0]
3.以及输出的结果应该为 map[N-1][N-1] 而非 map
#include <stdio.h> int input[1010][1010]; int map[1010][1010]; int min(int a, int b) { return a<b?a:b; } int main() { int N; int i, j; while(scanf("%d", &N) == 1) { for(i = 0; i < N; i++) { for(j = 0; j < N; j++) scanf("%d", &input[i][j]); } map[0][0] = input[0][0]; for(j = 1; j < N ;j++) map[0][j] = map[0][j-1] + input[0][j]; for(i = 1; i < N; i++) map[i][0] = map[i-1][0] + input[i][0]; for(i = 1; i < N; i++) { for(j = 1; j < N; j++) { map[i][j] = min(map[i-1][j], map[i][j-1]) + input[i][j]; } } printf("%d\n", map[N-1][N-1]); } return 0; }
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1147
相关文章推荐
- 砝码称重问题求解:动态规划与母函数方法
- NYOJ 题目252 01串(动态规划,递推)
- 动态规划专栏(2)多种方法解【滑雪】
- 动态规划与递推——动态规划是最优化算法 ( 转自2004chen)
- LeetCode 70. Climbing Stairs 自顶向下记忆化搜索,自底向上重叠子问题动态规划
- HDOJ 题目 4597 Play Game(动态规划,记忆化搜索)
- 100道动态规划——8 UVA 1631 Locker 递推,状态的定义以及状态转移方程
- 用拓扑排序+动态规划的方法输出DAG的所有可能的路径
- 动态规划_方法总结
- 第4章 基于PSO并融合海事规则的已知动态路径规划方法
- 动态规划方法
- 100道动态规划——30 UVAlive 3907 Puzzle AC自动机上的动态规划,记忆化搜索
- 背包算法递归实现,递归转动态规划的一般方法java实现
- 动态规划之换钱的最少货币数以及换钱方法数
- 动态规划--找零钱有多少种方法
- 动态规划;漂亮打印问题;时间复杂度O(n方); 思考方法记录在内;
- 动态规划的记忆搜索与递推
- 动态规划方法之最长公共子序列
- 【总结】120826线性动态规划的方法和优化
- CUGB 1009 DP简单动态规划,此题一开始就结了很久,WA了9次对于刚开始学DP的我打击很大,最后发现原来是方法弄错了,题意没完全弄懂!看了大牛的文章才知道,差距啊!还得好好努力。