DP:Skiing(POJ 1088)

题目是中文的,要读懂题目其实不难
其实这道题挺经典的,我们这样想,他最终要找到一个最大值,这个时候我们就想到要用动态规划
那怎么用呢?我们同时这样想,由于滑雪的最高点我们不能立马找出来,而且也不一定是最高点就是最长路径的起点。所以我们要不断搜索,我们知道对图的搜索有BFS和DFS,从题目上看,我们应该需要从头走到尾直到找不到路为止,所以我们这题要用DFS,同时,结合我们要用动态规划的思想,我们应该再弄一个矩阵,来保存前面搜索过的路经长,一个点的邻接点如果还没有被搜索过,我们就进入搜索,否则,我们应该直接引用前面已经保存过的路经长,并把搜索过的节点进行标记。
而这样的方法,就是经典的记忆化搜索方法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX(a,b) (a)>(b)?(a):(b) typedef struct map
{
int Known;
int dist;
}Dist_Map; Dist_Map dp[][];
int Input_Map[][]; int Search(const int, const int, int *const, int, int); int main(void)
{
int R, C, i, j, Max_Length;
while (~scanf("%d%d",&R,&C))
{
Max_Length = ; memset(dp, , sizeof(dp));
for (i = ; i < R; i++)//读图
for (j = ; j < C; j++)
scanf("%d", &Input_Map[i][j]); for (i = ; i < R; i++)
for (j = ; j < C; j++)
if (!dp[i][j].Known)
Search(R, C, &Max_Length, i, j);
printf("%d\n", Max_Length);
}
return ;
} int Search(const int R, const int C, int *const Max_Length, int py, int px)
{
int re_ans;
dp[py][px].Known = ; dp[py][px].dist = ; if (py - >= && Input_Map[py][px] > Input_Map[py - ][px])
{
if (!dp[py - ][px].Known)
re_ans = Search(R, C, Max_Length, py - , px);
else
re_ans = dp[py - ][px].dist;
dp[py][px].dist = MAX(re_ans + , dp[py][px].dist); }
if (py + < R && Input_Map[py][px] > Input_Map[py + ][px])
{
if (!dp[py + ][px].Known)
re_ans = Search(R, C, Max_Length, py + , px);
else
re_ans = dp[py + ][px].dist;
dp[py][px].dist = MAX(re_ans + , dp[py][px].dist);
}
if (px - >= && Input_Map[py][px] > Input_Map[py][px - ])
{
if (!dp[py][px - ].Known)
re_ans = Search(R, C, Max_Length, py, px - );
else
re_ans = dp[py][px - ].dist;
dp[py][px].dist = MAX(re_ans + , dp[py][px].dist);
}
if (px + < C && Input_Map[py][px] > Input_Map[py][px + ])
{
if (!dp[py][px + ].Known)
re_ans = Search(R, C, Max_Length, py, px + );
else
re_ans = dp[py][px + ].dist;
dp[py][px].dist = MAX(re_ans + , dp[py][px].dist);
} *Max_Length = MAX(dp[py][px].dist, *Max_Length);
return dp[py][px].dist;
}
DP:Skiing(POJ 1088)的更多相关文章
- 树形dp入门(poj 2342 Anniversary party)
题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...
- 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)
Charm Bracelet POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...
- Scout YYF I(POJ 3744)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5565 Accepted: 1553 Descr ...
- Skiing(最短路)
poj——3037 Skiing Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4921 Accepted: 1315 ...
- Collecting Bugs(POJ 2096)
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3064 Accepted: 1505 ...
- HDU 5396 Expression(DP+组合数)(详解)
题目大意: 给你一个n然后是n个数. 然后是n-1个操作符,操作符是插入在两个数字之间的. 由于你不同的运算顺序,会产生不同的结果. 比如: 1 + 1 * 2 有两种 (1+1)*2 或者 ...
- HDU 2829 Lawrence(四边形优化DP O(n^2))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...
- HDU 2829 Lawrence(斜率优化DP O(n^2))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...
- 三十道DP练习(持续更新)(pw:DP)
前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...
随机推荐
- codevs4927 线段树练习5
题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b] ...
- ExtJS入门教程01,Window如此简单,你怎能不会?
这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法.希望大家能够支持! 来吧,创建一个漂亮的弹出窗 var win = Ext.create("Ext.Wi ...
- tomcat7禁用catalina.out输出
tomcat7中禁用catalina.out的输出,又可能很大. 直接修改catalina.sh文件的输出语句. 在文件中找到以下内容. if [ -z "$CATALINA_OUT&quo ...
- javascript判断文件大小
<input type="file" id="fileName" name ="fileName" onchange="Ge ...
- Memcache和Redis
- Linux 下模拟Http 的get or post请求(curl和wget两种方法)
一.get请求: 1.使用curl命令: curl "http://www.baidu.com" 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地curl -i & ...
- Jenkins 搭建U3D自动发布 Android
工具 [u3d相关的PostProcessBuildPlayer,PerformBuild.cs] 1.Jenkins 开源包 Java -jar jenkins.war,参考链接 http://w ...
- cmd+lcx+nc+sc提权工具总结
cmd:执行命令的载体cmdshell lcx:端口映射工具 1.在自己的host上的cmd下运行:lcx.exe -listen 51 3389 //意思是监听51端口并转发到3389端口 2.在服 ...
- phpcms 网站迁移服务器
相信很多人不知道怎么去把PHPCMS V9进行搬家 在本地测试好的phpcms v9网站需要搬到服务器上,可以用以下方法: 1.上传所有的程序文件(如果主机支持压缩包在线解压,那么就打成zip的包,f ...
- 实现JavaScript自定义函数的整合、链式调用及类的封装
函数声明形式:表单验证函数 1 2 3 4 5 6 7 8 9 10 11 12 13 function checkName(){ console.log('检查用户名'); } functi ...