滑雪问题,用动态规划,计算出每个点作为起始点时的最长,
注意计算的中间结果用矩阵保存,最后再所有路径中找出最长
那条就是答案,要理解动态规划与递归的区别与联系
#include <iostream> using namespace std; int data[102][102],longetr[102][102]; int m,n; int cal(int i,int j){ int max = 0; if (longetr[i][j] > 0) //如果该点已经计算过直接返回路径长度,保存已有的计算结果这是动态规划优越之处 return longetr[i][j]; if(j-1 >= 0 && data[i][j] > data[i][j-1] && max < cal(i,j-1)) max = cal(i,j-1);//向左走 if(j+1 < n && data[i][j] > data[i][j+1] && max < cal(i,j+1)) max = cal(i,j+1);//向右走 if(i-1 >= 0 && data[i][j] > data[i-1][j] && max < cal(i-1,j)) max = cal(i-1,j);//向上走 if(i+1 < m && data[i][j] > data[i+1][j] && max < cal(i+1,j)) max = cal(i+1,j);//向下走 return longetr[i][j] = max + 1;//最长路径就是相邻四个节点最长路径加1所得四条路径中最长那条 } int main(){ int i,j; cin>>m>>n; int maxway = 0; for ( i=0;i<m;i++) for( j=0;j<n;j++){ cin>>data[i][j]; longetr[i][j] = 0; } for ( i=0;i<m;i++) for( j=0;j<n;j++){ longetr[i][j] = cal(i,j); } for ( i=0;i<m;i++) for( j=0;j<n;j++){ if(maxway < longetr[i][j]) maxway = longetr[i][j]; } cout<<maxway<<endl; return 0; }
您还没有登录,请您登录后再发表评论
动态规划算法poj1088滑雪实验报告 动态规划算法poj1088滑雪实验报告
百练POJ1088滑雪问题的源代码,C写的,不过后缀是.cpp。写的还算比较易懂,呵呵
poj 1088 滑雪 代码,记忆化搜索
poj acm通过的水题 完美动态规划和递归的应用,欢迎查看分享
poj经典动态规划题目解题报告,包括经典的动态规划题目20多道,可以作为学习动态规划系统的资料,包括题目: Pku acm 1179 Polygon Pku acm 1125 Stockbroker Grapevine Pku acm 1160 post office Pku ...
POJ上1088号的滑雪问题,需要的赶紧收藏了吧。递归典范
POJ10838(滑雪)代码,POJ10838(滑雪)代码
坐标型动态规划 poj1191棋盘分割 poj1088滑雪 noi过河卒 动态规划的解题思想及思路
poj_1088 滑雪 lei.cpp是AC得代码 wang.cpp是wrong answer代码 in.cpp是随机产生测试数据的代码 *.bat是对比脚本
相关推荐
动态规划算法poj1088滑雪实验报告 动态规划算法poj1088滑雪实验报告
百练POJ1088滑雪问题的源代码,C写的,不过后缀是.cpp。写的还算比较易懂,呵呵
poj 1088 滑雪 代码,记忆化搜索
poj acm通过的水题 完美动态规划和递归的应用,欢迎查看分享
poj经典动态规划题目解题报告,包括经典的动态规划题目20多道,可以作为学习动态规划系统的资料,包括题目: Pku acm 1179 Polygon Pku acm 1125 Stockbroker Grapevine Pku acm 1160 post office Pku ...
POJ上1088号的滑雪问题,需要的赶紧收藏了吧。递归典范
POJ10838(滑雪)代码,POJ10838(滑雪)代码
坐标型动态规划 poj1191棋盘分割 poj1088滑雪 noi过河卒 动态规划的解题思想及思路
poj_1088 滑雪 lei.cpp是AC得代码 wang.cpp是wrong answer代码 in.cpp是随机产生测试数据的代码 *.bat是对比脚本