POJ1088 动态规划
题意:
解答:
这个题目和最长子序列什么的极为类似。只是之前都是一维,如今变成二维的了。仅此而已。因此我们能够想办法把它先变成一维的。
- 先用一个结构体存储这个矩阵,这就成一维的了。
struct Node{
int height; //这个是高度
int r; //x坐标
int c; //y坐标
}a[100*100+5];
然后我们能够依据height排序。从最高点開始考虑,,有点贪心的意思。。
和单源最短路径dijkstra类似。
- 然后还是要存一个矩阵的~
int ma[100+2][100+2][2];
//ma[][][0] :存储的是高度
ma[][][1] :这里将它作为DP递归,存储的是:到这个点时最长的长度
- 然后我们依照那个结构体进行遍历。,每次遍历到一个节点i,我们考虑他的周围四个点,假设高度小于他们,更新(而且要取最大当中最大的DP值+1)。否则为1。(是不是和最长上升子序列一样???)
- 结果就是当中的最大值
代码:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node{
int height;
int r;
int c;
}a[100*100+5];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
int ma[100+2][100+2][2];
int R,C;
bool cmp(const Node &a, const Node &b){
return a.height>b.height;
}
int main()
{
//freopen("data.txt",'r');
scanf("%d%d",&R,&C);
memset(a,0,sizeof(a));
memset(ma,0,sizeof(ma));
int k = 0;
for(int i = 1; i<=R; i++){
for(int j = 1; j<=C; j++){
scanf("%d",&a[k].height);
ma[i][j][0] = a[k].height;
a[k].r = i;
a[k++].c = j;
}
}
sort(a,a+k,cmp);
int ans = 1;
for(int i = 0; i<R*C; i++){
int maxx = 0;
for(int j =0; j<4; j++){
int x = a[i].r + dx[j];
int y = a[i].c + dy[j];
if(x<1 || x>R || y<1 || y>C) continue;
if(ma[x][y][0] > a[i].height)
maxx = max(maxx, ma[x][y][1]);
}
ma[a[i].r][a[i].c][1] = maxx+1;
ans = max(ans,maxx+1);
}
printf("%d\n",ans);
return 0;
}
POJ1088 动态规划的更多相关文章
- POJ1088滑雪(记忆化搜索+DFS||经典的动态规划)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 84297 Accepted: 31558 Description M ...
- 滑雪---poj1088(动态规划+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 有两种方法 一是按数值大小进行排序,然后按从小到大进行dp即可: #include <iostream> #incl ...
- POJ-1088滑雪,典型的动态规划题,与NYOJ-10skiing一样,但NYOJ上时限是3s,用搜索可以过,但在POJ上就超时了~~
滑雪 Time Limit: 1000MS Memory Limit: 65536k ...
- DP----入门的一些题目(POJ1088 POJ1163 POJ1050)
动态规划入门 DP 基本思想 具体实现 经典题目 POJ1088 POJ1163 POJ1050 (一) POJ1088,动态规划的入门级题目.嘿嘿,连题目描述都是难得一见的中文. 题目分析: 求最长 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
随机推荐
- yii2 项目初始化
yii 项目目录下执行.composer self-updatecomposer global require "fxp/composer-asset-plugin:^1.4.1" ...
- WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)
用了一段时间Arduino IDE,感觉比较简陋~~很多功能都没有~虽然不影响使用啦~(主要是启动速度有点慢...我的破笔记本….), 网上搜寻了下,发现sublime text有插件可以替代,这就比 ...
- java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session
项目配置了spring 4.0.6.RELEASE 和hibernate4.2.0.Final ,出错原因是因为在Spring 3.1开始没有了HibernateDaoSupport类,而我的却Dao ...
- java.net.MalformedURLException: Protocol not found:
出现java.net.MalformedURLException: Protocol not found: 一般来说是url地址没有写对.没有以http://开头,或者出现空格等格式问题: 要看清楚 ...
- 3Sum Smaller -- LeetCode
Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...
- 【树链剖分】【函数式权值分块】bzoj1146 [CTSC2008]网络管理Network
裸题,直接上.复杂度O(n*sqrt(n)*log(n)). //Num[i]表示树中的点i在函数式权值分块中对应的点 //Map[i]表示函数式权值分块中的点i在树中对应的点 #include< ...
- openresty总结
协程 1.例如当获取的数据没有前后依赖关系时,可以使用ngx.thread.spawn和ngx.thread.wait同时从数据库不同的库.表或者不同来源(mysql,redis等)获取数据. htt ...
- display:flex;多行多列布局学习
从以前的table布局到现在的div布局,再到未来的flex布局,CSS重构方面对展示行和适应性的要求越来越高: 首先来比较一下布局方式的更新意义: table布局: 优点:1.兼容性好,ie6.ie ...
- 【IntellJ IDEA】idea忽略隐藏文件、文件夹的设置操作
左上角setting 如果要忽略文件夹,则直接填写文件夹名字即可,例如:要忽略target文件夹[建议:尽量不要把target忽略,因为可能编译出问题排查,还需要查看target文件夹中的编译结果] ...
- HttpApplication理解
HttpApplication对象是经由HttpApplicationFactory.GetApplicationInstance(并最终调用HttpRuntime.CreateNonPublicIn ...