北大教你怎么滑雪

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

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

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

    问题: Input输入的第一行是一个整数T( 1 <= T <= 100 ),表示有几组输入数据.每组输入由4部分组成:(1)一个字典,最多包含2000个单词,每个单词一行.(2)一行字符 ...

  2. 宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法

    首先虚拟机的网络连接设置为"Host-only": 然后在 cmd 窗口中查看 VMnet1 的 ip 地址,这里是 192.168.254.1 接下来在 Linux 中设置网卡地 ...

  3. SpringMVC配置

    博客园 闪存 首页 新随笔 联系 管理 订阅 随笔- 4  文章- 1  评论- 0  搭建springmvc框架的另一种思路 在一个完整的项目里搭建springmvc框架的时候, 通常情况下,初学者 ...

  4. BZOJ1022 [SHOI2008]小约翰的游戏John

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...

  5. BZOJ3172 后缀数组

    题意:求出一篇文章中每个单词的出现次数 对样例的解释: 原文是这样的: a aa aaa 注意每个单词后都会换行 所以a出现次数为6,aa为3 (aa中一次,aaa中两次),aaa为1 标准解法好像是 ...

  6. You've got to find what you love

    你必须找到你爱的东西 You've got to find what you love 史蒂夫乔布斯2005年6月在斯坦福大学毕业典礼上的演讲 I am honored to be with you ...

  7. HDU 2255 奔小康发大财

    传送门 Solution: KM算法 关于KM算法有一篇极好的文档http://www.cse.ust.hk/~golin/COMP572/Notes/Matching.pdf Implementat ...

  8. 如何把项目托管到GitHub

    第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注册入口 第二步:准备工作 gitHub网站使用Git版本管理工具来对仓库进行管理,注意它们并不等同. gitHub是全球最 ...

  9. MyEclipse2014中SVN的使用方法

    MyEclipse中的SVN操作手册 1.导入项目 点击工具栏上的[File-Import],进入下图 (如果你的对话框中没有SVN这一条目,可能是因为你没有安装SVN插件,请安装完成后,在看这篇博客 ...

  10. 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间

    在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...