[SHOI2002]滑雪 动态规划
1. Problem Description
Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可行的滑坡为24-17-16-1(从24开始,在1结束)。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
2. Input
输入的第一行为表示区域的二维数组的行数R和列数C(1≤R,C≤100)。下面是R行,每行有C个数,代表高度(两个数字之间用1个空格间隔)。
3. Output
输出区域中最长滑坡的长度。
4.Sample
输入样例#1:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输出样例#1:
25
5. 详解
隔了很久再做这道题,突然蹦出一个灵感来
1,将给定的矩阵转化成为图,比如说 25 24 就可以连一条25通向24的单向边
2,按照高度的高低将点排序
3,动态规划求出最长路径
状态转移方程: f[t]=max(f[i]+1,f[t])f[t]=max(f[i]+1,f[t])f[t]=max(f[i]+1,f[t])
献上丑陋的代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M=200000;
int n,m,head[M],cnt;
int mp[150][150],dp[M];
struct nod{int sum,id;
}l[M];
struct node{int next,to;
}e[M];
inline int id(int x,int y){return (x-1)*m+y;
}
inline void add(int u,int v){e[++cnt].next=head[u];e[cnt].to=v;head[u]=cnt;
}
inline bool cmp(nod a,nod b){return a.sum>b.sum;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&mp[i][j]);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){l[id(i,j)].sum=mp[i][j];l[id(i,j)].id=id(i,j);if(mp[i][j]>mp[i-1][j]&&i>1)add(id(i,j),id(i-1,j));if(mp[i][j]>mp[i+1][j]&&i<n)add(id(i,j),id(i+1,j));if(mp[i][j]>mp[i][j-1]&&j>1)add(id(i,j),id(i,j-1));if(mp[i][j]>mp[i][j+1]&&j<m)add(id(i,j),id(i,j+1));} }int ans=1;for(int i=1;i<=n*m;i++)dp[i]=1;sort(l+1,l+n*m+1,cmp);for(int i=1;i<=n*m;i++){for(int j=head[l[i].id];j;j=e[j].next){int tt=e[j].to;dp[tt]=max(dp[tt],dp[l[i].id]+1);ans=max(ans,dp[tt]);}}cout<<ans;return 0;
}
[SHOI2002]滑雪 动态规划相关推荐
- P1434 [SHOI2002]滑雪(动态规划DP)
题目描述 Michael 喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael 想知道在一个区域中 ...
- [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)
P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...
- 洛谷:P1434 [SHOI2002] 滑雪 题解
题目: P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题关键字:记忆化搜索. 首先,这题为什么会想到记忆化?(知道的人直接跳过) 在dfs ...
- P1434 [SHOI2002] 滑雪
# [SHOI2002] 滑雪 ## 题目描述 Michael 喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载 ...
- 洛谷—P1434 [SHOI2002]滑雪题解
题目链接: P1434 [SHOI2002]滑雪 解题思路: 在这道题中dfs每种情况是,可能这个点之前已经搜过了,没必要再去搜索了,因此不如存储记住,就没必要再去dfs了.所以我们要记忆化搜索解决这 ...
- [洛谷]P1434 [SHOI2002] 滑雪
P1434 [SHOI2002] 滑雪 1.题目 2.分析 3.代码 1.map + dp 70 原因分析:当key相同时,map会覆盖掉先前的值!! 2.优先队列priority_queue + d ...
- 洛谷 P1434 [SHOI2002] 滑雪(优先队列+dp / 记忆化搜索)
P1434 [SHOI2002] 滑雪https://www.luogu.com.cn/problem/solution/P1434 优先队列+dp 本题状态转移方程一目了然 为了保证状态间无后效性, ...
- 洛谷P1434 [SHOI2002]滑雪
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
最新文章
- R语言glmnet包拟合广义线性模型
- 【转】杀人后一个孩子的做法…不看你会后悔的…
- 计算机组成比作人的什么位置,理学第章计算机组成上.ppt
- mysql5.0.27+apache2.0.59+php5.2.0+phpMyAdmin-2.6.4-pl3
- 搜索引擎下拉食云速捷详细_详细解析关键词与搜索引擎之间的霸屏关系
- MySQL 索引详解大全
- 图形界面下,如何查看LINUX隐藏的文件、目录
- 中标麒麟使用centos源_中标麒麟操作系统使用笔记
- 江西不动产登记局今日挂牌
- Java Web从入门到实战
- c语言数学函数库根号程序,C语言初学 数学中带根号的复杂计算问题
- 【课件制作软件】Focusky教程 | 设置文字阴影效果
- OKR与KPI有什么区别
- [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。
- DCGAN论文改进之处+简化代码
- (一)Google Earth Engine概述
- 关系型数据库表之间的联系[关系]详解
- 2015校园招聘360失败的惨痛经历
- 在Ubuntu上安装使用 iCloud
- linux安装beyondcompare