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]滑雪 动态规划相关推荐

  1. P1434 [SHOI2002]滑雪(动态规划DP)

    题目描述 Michael 喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael 想知道在一个区域中 ...

  2. [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)

    P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...

  3. 洛谷:P1434 [SHOI2002] 滑雪 题解

    题目: P1434 [SHOI2002] 滑雪 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题关键字:记忆化搜索. 首先,这题为什么会想到记忆化?(知道的人直接跳过) 在dfs ...

  4. P1434 [SHOI2002] 滑雪

    # [SHOI2002] 滑雪 ## 题目描述 Michael 喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载 ...

  5. 洛谷—P1434 [SHOI2002]滑雪题解

    题目链接: P1434 [SHOI2002]滑雪 解题思路: 在这道题中dfs每种情况是,可能这个点之前已经搜过了,没必要再去搜索了,因此不如存储记住,就没必要再去dfs了.所以我们要记忆化搜索解决这 ...

  6. [洛谷]P1434 [SHOI2002] 滑雪

    P1434 [SHOI2002] 滑雪 1.题目 2.分析 3.代码 1.map + dp 70 原因分析:当key相同时,map会覆盖掉先前的值!! 2.优先队列priority_queue + d ...

  7. 洛谷 P1434 [SHOI2002] 滑雪(优先队列+dp / 记忆化搜索)

    P1434 [SHOI2002] 滑雪https://www.luogu.com.cn/problem/solution/P1434 优先队列+dp 本题状态转移方程一目了然 为了保证状态间无后效性, ...

  8. 洛谷P1434 [SHOI2002]滑雪

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

  9. 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)

    题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...

最新文章

  1. R语言glmnet包拟合广义线性模型
  2. 【转】杀人后一个孩子的做法…不看你会后悔的…
  3. 计算机组成比作人的什么位置,理学第章计算机组成上.ppt
  4. mysql5.0.27+apache2.0.59+php5.2.0+phpMyAdmin-2.6.4-pl3
  5. 搜索引擎下拉食云速捷详细_详细解析关键词与搜索引擎之间的霸屏关系
  6. MySQL 索引详解大全
  7. 图形界面下,如何查看LINUX隐藏的文件、目录
  8. 中标麒麟使用centos源_中标麒麟操作系统使用笔记
  9. 江西不动产登记局今日挂牌
  10. Java Web从入门到实战
  11. c语言数学函数库根号程序,C语言初学 数学中带根号的复杂计算问题
  12. 【课件制作软件】Focusky教程 | 设置文字阴影效果
  13. OKR与KPI有什么区别
  14. [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。
  15. DCGAN论文改进之处+简化代码
  16. (一)Google Earth Engine概述
  17. 关系型数据库表之间的联系[关系]详解
  18. 2015校园招聘360失败的惨痛经历
  19. 在Ubuntu上安装使用 iCloud
  20. linux安装beyondcompare

热门文章

  1. 售卖方式变革:将企业营销战略、策略、战术的全程贯通
  2. 简单实现stm32f103芯片usb模拟U盘进行IAP更新用户程序
  3. 网页自动识别跳转手机或pc
  4. 27. Green Building 绿色建筑
  5. C#多态的三种实现方式
  6. tpshop是全开源么?
  7. Pycharm中的中文显示问题处理
  8. N卡控制面板把physx设置为cpu
  9. PhysX 3.3 基础
  10. 哈工大 计算机系统 大作业