【题解】滑雪 luogu1434 记忆化搜索
记忆化搜索入门题
题目
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更长。事实上,这是最长的一条。
输入输出格式
输入格式:
输入的第一行为表示区域的二维数组的行数R和列数C(1≤R,C≤100)。
下面是R行,每行有C个数,代表高度(两个数字之间用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
输出样例
25
题解
分析
记忆化搜索
记忆化搜索本质上是搜索的一种
但它保证了,每一层回溯得到的结果都具有子最优性质
所以又具有了动态规划的特征
(i,j) 为当前所在的坐标
- 条件:由高处滑向低处$h[i][j]>h[p][q]$
- 转移:$dp[i][j]=max(up,down,left,right)+1$
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define re register int
using namespace std;
const int max_size=110;
int n,m;
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int h[max_size][max_size],dp[max_size][max_size];
int inMap(int x,int y){
if(x>=0&&x<=n-1&&y>=0&&y<=m-1) return 1;
return 0;
}
int max2(int a,int b,int c,int d){
return max(max(a,b),max(c,d));
}
int dfs(int i,int j){
int nx,ny,down=0,up=0,left=0,right=0;
if(dp[i][j]) return dp[i][j];
nx=i+dir[0][0]; ny=j+dir[0][1];
if(inMap(nx,ny)){
if(h[i][j]>h[nx][ny]) up=dfs(nx,ny);
}
nx=i+dir[1][0]; ny=j+dir[1][1];
if(inMap(nx,ny)){
if(h[i][j]>h[nx][ny]) right=dfs(nx,ny);
}
nx=i+dir[2][0]; ny=j+dir[2][1];
if(inMap(nx,ny)){
if(h[i][j]>h[nx][ny]) down=dfs(nx,ny);
}
nx=i+dir[3][0]; ny=j+dir[3][1];
if(inMap(nx,ny)){
if(h[i][j]>h[nx][ny]) left=dfs(nx,ny);
}
dp[i][j]=max2(up,down,left,right)+1;
return dp[i][j];
}
int main(){
scanf("%d%d",&n,&m);
memset(h,0,sizeof(h));
memset(dp,0,sizeof(dp));
for(re i=0;i<n;i++){
for(re j=0;j<m;j++){
scanf("%d",&h[i][j]);
}
}
int ans=-1;
for(re i=0;i<n;i++){
for(re j=0;j<m;j++){
ans=max(ans,dfs(i,j));
}
}
printf("%d\n",ans);
}
【题解】滑雪 luogu1434 记忆化搜索的更多相关文章
- POJ 1088 滑雪(记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 92384 Accepted: 34948 Description ...
- 滑雪_poj_1088(记忆化搜索).java
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 67987 Accepted: 25013 Description ...
- 洛谷 p1434 滑雪【记忆化搜索】
<题目链接> Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- POJ-1088 滑雪 (记忆化搜索,dp)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 86318 Accepted: 32289 Description Mich ...
- POJ 1088 滑雪【记忆化搜索】
题意:给出一个二维矩阵,要求从其中的一点出发,并且当前点的值总是比下一点的值大,求最长路径 记忆化搜索,首先将d数组初始化为0,该点能够到达的路径长度保存在d数组中,同时把因为路径是非负的,所以如果已 ...
- poj 1088 滑雪_记忆化搜索
题意:略 直接用记忆化搜索就行了 #include<cstdio> #include<iostream> using namespace std; int n,m; int m ...
- POJ1088滑雪(记忆化搜索)
就是用DP,DP[i][j]是在这个(i,j)位置作为起点的最长长度. 因为可能会超时,DP的话每次就是记录,然后就不用回溯了. 很简单的DFS里面的记忆化搜索. #include <stdio ...
- POJ 1088 滑雪 DFS 记忆化搜索
http://poj.org/problem?id=1088 校运会放假继续来水一发^ ^ 不过又要各种复习,功课拉下了许多 QAQ. 还有呀,就是昨天被一个学姐教育了一番,太感谢了,嘻嘻^ ^ 好了 ...
- OpenJ_Bailian - 1088 滑雪(记忆化搜索)
题意:给定一个二维数组,一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小,输出可以滑行的最长区域的长度. 分析:对于每一个点,进行记忆化搜索.若某点可以向四周某几个点滑行,记忆化搜索求出 ...
随机推荐
- CRM系统推动教育行业数字化转型
目前,教育培训的潜在市场规模巨大,并且保持着迅猛的发展态势.同时,随着众多外资企业不断涌入中国市场,与国内大大小小的培训机构展开竞争,所以教育行业的竞争也是非常的激烈.传统的教育行业亟待数字化转型,才 ...
- MSSQL·查询存储过程中的关键字
阅文时长 | 0.22分钟 字数统计 | 408字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询存储过程中的关键字』 编写人 | SCscHero 编写时间 | 20 ...
- LVS跨网段DR模型
客户端IP地址:172.16.8.147 路由器服务器IP地址:172.16.8.167内网IP地址:192.168.1.3 一.将客户端的网关修改为路由服务器IP地址 vim ifcfg-ens33 ...
- java基础——多维数组和稀疏数组
多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...
- [Java] 数据分析 -- 回归分析
线性回归 需求:从文件读取数据对,计算回归函数及系数 实现1:commons.math的SimpleRegression,定义函数getData从文件读取数据返回SimpleRegression类 1 ...
- 查询登录信息 w, who*, id, tty, last, finger
查询登录信息 w, who*, id, tty, last, finger Wavky2016.12.14 16:19:37字数 813阅读 85w [options] [user...]显示所有已登 ...
- Linux 操作系统(三) 添加用户、切换用户、删除用户
以下命令均已在 Kali Linux 验证. 1.添加用户 --1-- useradd -m username //username 代表你所添加的用户名 --2-- passw ...
- 最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示。 HardInfo 显示硬件具体信息,甚至包括一组八个的流行的性能基准程序,你可以用它们评估你的系统性能。 KInfoCenter 和 Lshw 也能够显示硬件的详细信息,并且可以从许多软件仓库中获取。
最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示. HardInfo 显示硬件具体信息,甚至包括一组八个的流 ...
- 用PHP爬取知乎的100万用户
http://blog.jobbole.com/88788/ 突然发现 大数据 Python的爬虫能力很强 爬取到的数据 直接可以用于维修QQ营销 精准营销
- 2.9高级变量类型操作(列表 * 元组 * 字典 * 字符串)_内置函数_切片_运算符_for循环
高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...