POJ 1088 滑雪 【记忆化搜索经典】
题目链接:http://poj.org/problem?id=1088
滑雪
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 107380 | Accepted: 40919 |
Description
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。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
Input
Output
Sample Input
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
Sample Output
25
Source
解题思路:
有意思的一道题目,DFS 上下左右搜,记录当前点的最优值。
注意范围:一开始把高度最低的点设为终点,显然这样是不对的,因为可能最后到达次低点的路径更长,或者到达次次低点的路径更长。所以终点就是最后不能再滑的点,无需预先找出来标记,最后在总的路径长度基础上加一即可。
AC code:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long int
#define INF 0x3f3f3f3f
using namespace std; const int MAXN = ;
int mmp[MAXN][MAXN];
int d[MAXN][MAXN];
int N, M;
bool ok(int x, int y)
{
if(x > && x <= N && y > && y <= M) return true;
else return false;
}
int dfs(int x, int y)
{
if(d[x][y]) return d[x][y];
if(ok(x-, y) && mmp[x-][y]<mmp[x][y])
{
int len = dfs(x-, y)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x+, y) && mmp[x+][y]<mmp[x][y])
{
int len = dfs(x+, y)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x, y-) && mmp[x][y-]<mmp[x][y])
{
int len = dfs(x, y-)+;
if(len > d[x][y]) d[x][y] = len;
}
if(ok(x, y+) && mmp[x][y+]<mmp[x][y])
{
int len = dfs(x, y+)+;
if(len > d[x][y]) d[x][y] = len;
}
return d[x][y];
} int main()
{
int ans = ;
scanf("%d%d", &N, &M);
for(int i = ; i <= N; i++)
for(int j = ; j <= M; j++)
{
scanf("%d", &mmp[i][j]);
}
for(int i = ; i <= N; i++)
for(int j = ; j <= M; j++)
ans = max(ans, dfs(i, j));
printf("%d\n", ans+);
return ;
}
POJ 1088 滑雪 【记忆化搜索经典】的更多相关文章
- POJ 1088 滑雪(记忆化搜索+dp)
POJ 1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 107319 Accepted: 40893 De ...
- POJ 1088 滑雪 (记忆化搜索)
题目链接:http://poj.org/problem?id=1088 题意很好懂,就是让你求一个最长下降路线的长度. dp[i][j]记录的是i j这个位置的最优的长度,然后转移方程是dp[i][j ...
- POJ 1088 滑雪 记忆化DP
滑雪 Time Limit: 1000MS Memory Limit: 65536K Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度 ...
- POJ 1088 DP=记忆化搜索
话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...
- POJ 1088 滑雪 记忆化优化题解
本题有人写是DP,只是和DP还是有点区别的,应该主要是记忆化 Momoization 算法. 思路就是递归,然后在递归的过程把计算的结果记录起来,以便后面使用. 非常经典的搜索题目,这样的方法非常多题 ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- tyvj 1004 滑雪 记忆化搜索
滑雪 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.tyvj.cn/p/1004 Description trs喜欢滑雪.他来 ...
- hdu 1978 How many ways 记忆化搜索 经典例题
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 洛谷-P1434 [SHOI2002]滑雪 (记忆化搜索)
题意:有一个\(R*C\)的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到\(1\)的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE ...
随机推荐
- zTree 图标样式
<link rel="stylesheet" href="jquery/ztree/css/zTreeStyle/zTreeStyle.css" /> ...
- 利用wireshark和python分析网络
- Python的logger配制文件
1:logger.conf ############################################### [loggers] keys=root,manylog,daylog [lo ...
- 2018湖湘杯web、misc记录
1.题目名 Code Check 打开题目,右键发现有id参数的url,简单base64解码以后发现不是明文,说明利用了其他的加密方式,那么应该会有具体的加密方式给我们,于是试试常见的文件泄露,可以发 ...
- 自己实现C++的string类
使用C++的朋友对string类都不会陌生,string类使用起来很是方便,比C的字符数组好用多了,但是我们能不能自己实现一个属于自己的string类呢? 实现一个具有基本功能的string类并不难, ...
- Unity3D第二课之通过键盘、鼠标移动物体
public class xuanzhuan : MonoBehaviour { //平移速度变量 public float MoveSpeed;// Use this for initializat ...
- 微信token验证源码分享(c#版)
在开发时遇到一个问题: 上线后提交申请微信提示"您的服务器没有正确响应token验证...",我查看日志发现根本就没有接收到来自微信的参数. 后来我又记录了微信请求方式和请求的字符 ...
- 每隔5s执行一次动作
TimeSpan timespan; //第一次获取系统时间 DateTime d1 = DateTime.Now; while (true) { //第二次获取系统时间 DateTime d2 = ...
- WPF - MVVM 之TreeView
在项目中使用OnPropertyChanged方法,最简单的实例: private event PropertyChangedEventHandler PropertyChanged; protect ...
- hdu 1087 最大递增和
思路和LIS差不多,dp[i]为i结尾最大值 #include <iostream> #include <string> #include <cstring> #i ...