2014 百度之星 题解 1004 Labyrinth
度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能走一格,且仅仅能向上向下向右走曾经没有走过的格子,每个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币能够为负,须要给强盗写欠条),度度熊刚開始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币?
输入的第一行是一个整数T(T < 200),表示共同拥有T组数据。
每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表对应格子中能得到金币的数量,每一个整数都大于等于-100且小于等于100。
对于每组数据,首先须要输出单独一行”Case #?:”,当中问号处应填入当前的数据组数,组数从1開始计算。
每组測试数据输出一行,输出一个整数,代表依据最优的打法,你走到右上角时能够获得的最大金币数目。
2
3 4
1 -1 1 0
2 -2 4 2
3 5 1 -90
2 2
1 1
1 1
Case #1:
18
Case #2:
4
本题使用动态规划法,这次百度之星有两题都是使用动态规划法的。
时间效率O(N^2),只是好像有人用O(N^3)的时间效率也能过。
这个复杂版本号的找路径问题,一般找路径问题仅仅能往两个方向走,而这个能够往三个方向走的。
关键点:
逐行搜索,可是每行须要从上往下搜一次,然后从下往上搜一次。由于能够往三个方向走, 所以该格可能是从上面走下来,也可能从以下走上来,也能够从左面直接走过来。
由于每行的第一列仅仅能从左跨过来,或者从下上来,最后一列也仅仅能从上下来或者从左跨过来; 那么第一列和最后一列都能够作为该行的初始搜索点。
#include <stdio.h>
#include <vector>
using std::vector;
using std::max; class Labyrinth_2
{
int golds(vector<vector<int> > &b)
{
vector<vector<int> > tbl(b.size(), vector<int>(b[0].size())); tbl[0][0] = b[0][0];
for (int i = 1; i < (int)b.size(); i++)
{
tbl[i][0] = tbl[i-1][0] + b[i][0];
} vector<int> cTbl(b.size());//不是b[0].size()
for (int c = 1; c < (int)b[0].size(); c++)
{
tbl[0][c] = tbl[0][c-1] + b[0][c];
int r = 1;
for ( ; r < (int)b.size(); r++)
{
tbl[r][c] = max(tbl[r-1][c], tbl[r][c-1]) + b[r][c];
}
--r;
cTbl[r] = tbl[r][c-1] + b[r][c];
for (--r; r >= 0; r--)
{
cTbl[r] = max(cTbl[r+1], tbl[r][c-1]) + b[r][c];
tbl[r][c] = max(tbl[r][c], cTbl[r]);
}
}
return tbl[0].back();
}
public:
Labyrinth_2()
{
int T, C, R;
scanf("%d", &T);
for (int t = 1; t <= T; t++)
{
printf("Case #%d:\n", t); scanf("%d %d", &R, &C);
vector<vector<int > > grid(R, vector<int>(C));
for (int i = 0; i < R; i++)
{
for (int k = 0; k < C; k++)
{
scanf("%d", &grid[i][k]);
}
}
printf("%d\n", golds(grid));
}
}
};
2014 百度之星 题解 1004 Labyrinth的更多相关文章
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2014 百度之星题解 1002 - Disk Schedule
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景. 磁盘 ...
- 2014百度之星预赛(第二场)——Best Financing
2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...
- 2014百度之星初赛第二场hdu 4831 Scenic Popularity
Scenic Popularity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2014百度之星第四题Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 2014 百度之星 1003 题解 Xor Sum
Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...
- 百度之星复赛 1004 / hdu5715 二分dp+trie
XOR 游戏 Problem Description 众所周知,度度熊喜欢XOR运算[(XOR百科)](http://baike.baidu.com/view/674171.htm). 今天,它发 ...
- 2014百度之星第三题Xor Sum(字典树+异或运算)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
随机推荐
- fail2ban安全设置
1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...
- flask-login 学习(1)
今天的目标,就是学习 flask-login.争取用1天时间,掌握个大概. 第一步:掌握flask-login的大致使用,具体参考了:https://www.centos.bz/2017/09/fla ...
- HTML常用标签及其属性
基本 <html>…</html> 定义 HTML 文档 <head>…</head> 文档的信息 <meta> HTML 文档的元信息 & ...
- 2.4G无线模块NRF2401
RF24L01+,是工作在2.4~2.5GHz 频段的,具备自动重发功能,6 个数据传输通道,最大无线传输速率为2Mbits.MCU 可与该芯片通过SPI 接口访问芯片的寄存器进行配置,达到控制模块. ...
- beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理
1,通过命令行自定义端口和环境 先用flag提取参数,如果要环境,就反向注进去, 如果是端口,就打到beego.Run函数里去. 2,在作router里的url解析时,如果URL中含有-中划线,用严格 ...
- ps | grep app 命令不显示grep app本身进程的几种方式
ps | grep app 命令不显示grep app本身进程的几种方式 使用ps命令查询进程,常常我们不想打印出"ps | grep app"这个当前进程,比如如下: [root ...
- 4款Github泄漏敏感信息搜索工具简单比较
gitrob Ruby开发,支持通过postgresql数据库https://github.com/michenriksen/gitrob weakfilescan Python开发,多线程,猪猪侠开 ...
- Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题
http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...
- 分页查询和redis
问题 我在做论坛的是时候遇到了如下的问题.论坛里可以有很多的主题topic,每个topic对应到很多回复reply.现在要查询某个topic下按照replyTime升序排列的第pageNo页的repl ...
- XV6操作系统代码阅读心得(四):虚拟内存
本文将会详细介绍Xv6操作系统中虚拟内存的初始化过程. 基本概念 32位X86体系结构采用二级页表来管理虚拟内存.之所以使用二级页表, 是为了节省页表所占用的内存,因为没有内存映射的二级页表可以不用分 ...