POJ 1088 动态规划
来源:互联网 发布:中纪海富软件开发公司 编辑:程序博客网 时间:2024/06/05 05:12
感觉这道题目对我学习动态规划还是挺有启发的,我一看这道题目的第一反应就是,动态规划。之后,我又在想,我该用什么样的循序规划那。因为地图上给的点都不是按顺序的,所以我又放弃的动态规划的思路。虽然是A了,但还是觉得动态规划是可行的,于是。。。。。。就去问的学长。(我真的好水的)
其实纠结点就在动态规划的循序上,(我是从小到大的循序),高的点一定是在低的的后面找到的,所以,如果我们对所有的点,以高度为基准从小到大排个序(其实从大到小也行,就是看自己怎么理解了),按照这的循序去动态规划他就OK了!
#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#define N 110using namespace std;int map[N][N];struct node{ int x,y; int h;}que[N*N];int f[][2]={-1,0,0,-1,0,1,1,0};int dp[N][N];bool cmp( node a ,node b){ return a.h <b.h;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ int sum=1; for(int i=0;i<n;i++) for(int j=0;j<m;j++){ scanf("%d",&map[i][j]); que[sum].x=i; que[sum].y=j; que[sum].h=map[i][j]; //dp[sum++]=1; ++sum; dp[i][j]=1; } sum--; // cout<<1<<endl; sort(que+1,que+1+sum,cmp); //for(int i=1;i<=sum;i++)cout<<que[i].h<<" ";cout<<endl; // cout<<1<<endl; int max1=1; for(int i=1;i<=sum;i++) for(int j=0;j<4;j++){ int tx=que[i].x+f[j][0]; int ty=que[i].y+f[j][1]; if(0<=tx&&tx<n&&0<=ty&&ty<m&&que[i].h>map[tx][ty]){ dp[que[i].x][que[i].y]=max(dp[que[i].x][que[i].y],dp[tx][ty]+1); max1=max(max1,dp[que[i].x][que[i].y]); } } printf("%d\n",max1); } return 0;}
这道题还可以用记忆化搜索去做
#include<iostream>#include<cstdio>#include<cstdlib>#define N 110using namespace std;int map[N][N];int dp[N][N];int n,m;int f[][2]={0,1,0,-1,1,0,-1,0};int dfs(const int x,const int y){ if(dp[x][y]!=0)return dp[x][y]; dp[x][y]=1; for(int i=0;i<4;i++){ int tx=x+f[i][0]; int ty=y+f[i][1]; if(0<=tx&&tx<n&&0<=ty&&ty<m&&map[tx][ty]<map[x][y]) {
dp[x][y]=max(dp[x][y],dfs(tx,ty)+1); } } return dp[x][y];}int main(){ while(~scanf("%d%d",&n,&m)){ for(int i=0;i<n;i++) for(int j=0;j<m;j++){ scanf("%d",&map[i][j]); dp[i][j]=0; } int max1=1; for(int i=0;i<n;i++) for(int j=0;j<m;j++){ if(dp[i][j]==0){ dfs(i,j); max1=max(dp[i][j],max1); } } printf("%d\n",max1); }}
- POJ 1088 动态规划
- poj 1088 动态规划
- POJ 1088 动态规划
- poj 1088 动态规划
- POJ 1088 动态规划
- 动态规划 :POJ 1088 滑雪
- poj 1088 滑雪 动态规划
- POJ 1088 滑雪 -- 动态规划
- POJ 1088 滑雪 动态规划
- POJ-1088 滑雪 (动态规划)
- 【动态规划】[POJ 1088]滑雪
- poj 1088 滑雪 动态规划
- poj 1088 滑雪【动态规划】
- poj 1088 滑雪 动态规划
- [POJ](1088)滑雪 ---- 动态规划
- Poj 1088 滑雪(经典动态规划)
- POJ 1088 比较有意思的动态规划
- POJ 1088 滑雪问题 动态规划
- HDOJ 4604 - Deque O(nlogn)的最长非升(非降)
- 提升你的Java应用性能
- Redis安装与源码调试
- HDU 计算直线的交点数
- HDU 4562 守护雅典娜(金山复赛第二场)
- POJ 1088 动态规划
- 如何处理SqlServer2005安装过程中com+检查失败问题
- java设计模式
- char、varchar、nchar、nvarchar的区别
- 一篇很赞的LCD驱动
- 用MySQL 的 CONCAT() 、ISNULL()、IF() 拼接查询结果
- mac 安装pomelo ios客户端步骤
- 程序员如何写出杀手级简历
- 安装ubuntu后的配置和软件安装,留给自己以后用