POJ 1088 滑雪问题 动态规划

本文介绍了一种使用动态规划解决滑雪问题的方法,通过计算从每个起点出发的最长路径,并利用矩阵保存中间结果来避免重复计算,最终找到全局最长路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

滑雪问题,用动态规划,计算出每个点作为起始点时的最长,

注意计算的中间结果用矩阵保存,最后再所有路径中找出最长

那条就是答案,要理解动态规划与递归的区别与联系

#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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值