北大教你怎么滑雪

  题目是中文的,要读懂题目其实不难

  其实这道题挺经典的,我们这样想,他最终要找到一个最大值,这个时候我们就想到要用动态规划

  那怎么用呢?我们同时这样想,由于滑雪的最高点我们不能立马找出来,而且也不一定是最高点就是最长路径的起点。所以我们要不断搜索,我们知道对图的搜索有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)的更多相关文章

  1. 树形dp入门(poj 2342 Anniversary party)

    题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...

  2. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  3. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

  4. Skiing(最短路)

    poj——3037 Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4921   Accepted: 1315 ...

  5. Collecting Bugs(POJ 2096)

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 3064   Accepted: 1505 ...

  6. HDU 5396 Expression(DP+组合数)(详解)

    题目大意: 给你一个n然后是n个数. 然后是n-1个操作符,操作符是插入在两个数字之间的. 由于你不同的运算顺序,会产生不同的结果. 比如: 1 + 1 * 2 有两种  (1+1)*2   或者   ...

  7. HDU 2829 Lawrence(四边形优化DP O(n^2))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...

  8. HDU 2829 Lawrence(斜率优化DP O(n^2))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 题目大意:有一段铁路有n个站,每个站可以往其他站运送粮草,现在要炸掉m条路使得粮草补给最小,粮草 ...

  9. 三十道DP练习(持续更新)(pw:DP)

    前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...

随机推荐

  1. codevs4927 线段树练习5

    题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b] ...

  2. ExtJS入门教程01,Window如此简单,你怎能不会?

    这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法.希望大家能够支持! 来吧,创建一个漂亮的弹出窗 var win = Ext.create("Ext.Wi ...

  3. tomcat7禁用catalina.out输出

    tomcat7中禁用catalina.out的输出,又可能很大. 直接修改catalina.sh文件的输出语句. 在文件中找到以下内容. if [ -z "$CATALINA_OUT&quo ...

  4. javascript判断文件大小

    <input type="file" id="fileName" name ="fileName" onchange="Ge ...

  5. Memcache和Redis

  6. Linux 下模拟Http 的get or post请求(curl和wget两种方法)

    一.get请求: 1.使用curl命令: curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地curl -i & ...

  7. Jenkins 搭建U3D自动发布 Android

    工具 [u3d相关的PostProcessBuildPlayer,PerformBuild.cs] 1.Jenkins 开源包  Java -jar jenkins.war,参考链接 http://w ...

  8. cmd+lcx+nc+sc提权工具总结

    cmd:执行命令的载体cmdshell lcx:端口映射工具 1.在自己的host上的cmd下运行:lcx.exe -listen 51 3389 //意思是监听51端口并转发到3389端口 2.在服 ...

  9. phpcms 网站迁移服务器

    相信很多人不知道怎么去把PHPCMS V9进行搬家 在本地测试好的phpcms v9网站需要搬到服务器上,可以用以下方法: 1.上传所有的程序文件(如果主机支持压缩包在线解压,那么就打成zip的包,f ...

  10. 实现JavaScript自定义函数的整合、链式调用及类的封装

    函数声明形式:表单验证函数 1 2 3 4 5 6 7 8 9 10 11 12 13 function checkName(){     console.log('检查用户名'); } functi ...