2014百度之星第四题Labyrinth(DP)
Labyrinth
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1804 Accepted Submission(s): 626
Problem Description
度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫。该迷宫仅仅能从矩阵左上角第一个方格開始走。仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能走一格。且仅仅能向上向下向右走曾经没有走过的格子,每个格子中都有一些金币(或正或负。有可能遇到强盗拦路抢劫,度度熊身上金币能够为负。须要给强盗写欠条)。度度熊刚開始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币?
Input
输入的第一行是一个整数T(T < 200)。表示共同拥有T组数据。
每组数据的第一行输入两个正整数m。n(m<=100。n<=100)。接下来的m行,每行n个整数。分别代表对应格子中能得到金币的数量,每一个整数都大于等于-100且小于等于100。
Output
对于每组数据,首先须要输出单独一行”Case #?:”。当中问号处应填入当前的数据组数。组数从1開始计算。
每组測试数据输出一行,输出一个整数。代表依据最优的打法,你走到右上角时能够获得的最大金币数目。
Sample Input
2
3 4
1 -1 1 0
2 -2 4 2
3 5 1 -90
2 2
1 1
1 1
Sample Output
Case #1:
18
Case #2:
4
题解:
拿到本题。第一想法是DFS,n=100,肯定超时。
后来抓到了关键条件不能往左走,于是非常自然的有了动态规划想法。总的想法是一列一列的处理,当前列依据上一列求得,每一个位置依次上下比較全部可能,总的时间复杂度O(m*n*n)。
自上而下的dp[i][j]=max(dp[i][j],dp[k][j-1]+∑wei[k][j])。k<i。
自下而上的dp[i][j]=max(dp[i][j],dp[k][j-1]+∑wei[k][j]),i<k<n;
贴段代码:
#include <iostream>
#include <cstdio>
using namespace std; const int MAXN = 100+10;
const int INF =100*100*150; int n, m;
int g[MAXN][MAXN];
int dp[MAXN][MAXN]; void Sovle(int x)
{
int i,j,tmp;
for(i = 1; i <= m; ++i)
{
tmp =dp[i][x-1] + g[i][x];
if(dp[i][x] < tmp)
dp[i][x] = tmp;
for(j = i+1; j <= m; ++j)
{
tmp +=g[j][x];
if(tmp > dp[j][x])
dp[j][x] = tmp;
}
}
for(i = m; i > 0; --i)
{
tmp =dp[i][x-1] +g[i][x];
if(dp[i][x] < tmp)dp[i][x] = tmp;
for(j = i-1; j > 0; --j)
{
tmp += g[j][x];
if(tmp >dp[j][x])
dp[j][x] = tmp;
}
}
} int main()
{
int i,j,cas,tag=1;
scanf("%d", &cas);
while(cas--)
{
scanf("%d%d", &m, &n);
for(i = 1; i <= m; ++i)
{
for(j = 1; j <= n; ++j)
{
scanf("%d", &g[i][j]);
dp[i][j] = -INF;
}
}
dp[1][1] = g[1][1];
for(i = 2; i <= m; ++i)
{
dp[i][1] = dp[i-1][1] + g[i][1];
}
for(i = 2; i <= n; ++i)
{
Sovle(i);
}
printf("Case #%d:\n%d\n",tag++, dp[1][n]);
}
return 0;
}
2014百度之星第四题Labyrinth(DP)的更多相关文章
- 2014百度之星第三题Xor Sum(字典树+异或运算)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- 2014 百度之星 题解 1004 Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- 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
Problem Description 度度熊是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫.该迷宫仅仅能从矩阵左上角第一个方格開始走.仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)
Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2014百度之星第一题Energy Conversion
Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
随机推荐
- Geoserver基本使用、WMS服务发布与OpenLayers测试
1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
- Mac 安装Qt5.1编译出现的错误解决
错误提示: :-1: 错误:Xcode is not installed in /Volumes/Xcode/Xcode.app/Contents/Developer. Please use xcod ...
- JavaScript 【跨浏览器XPath,做个兼容】
IE的Xpath 获取单一节点 var xmlDom = getXMLDOM(xmlStr);//调用之前写好的方法获得XMLDOM对象 // var node = xmlDom.selectSing ...
- 关于XMLHttpRequest对象的responseText属性
下面的代码是利用Ajax实现在输入框中写入一个ID号,即时的从数据库中取得数据并在页面无刷新的情况下显示. Ajax.aspx的代码: <%@ Page Language="C#& ...
- UVa 821 Page Hopping
题意: 给出一个有向图,求所有路径(两点间的最短路径)的平均值. 分析: 用floyd求两点间的最短距离,然后求平均就好. 代码: #include <iostream>#include ...
- sqlserver 2008 局域网跨服务器T-SQL操作(一)
--查看当前链接情况: select * from sys.servers; --增加链接,参数:服务器别名,为链接服务器的OLE DB数据源的产品名称,与此数据源对应的OLE DB访问接口的唯一编程 ...
- iOS开发那些事儿(六)Git分之策略
git 分支策略 将要介绍的这个模型不会比任何一套流程内容多,每个团队成员都必须遵守,这样便于管理软件开发过程. 既分散又集中 我们使用的,且与这个分支模型配合的非常好的库,他有一个“真正”的中央仓库 ...
- java后台获取国际化资源文件
//current属性,由于此属性只做赋值操作,不做取值操作,因此没有get方法 private Locale current; public void setCurrent(Locale cur) ...
- EventBus通信
需求: 1.ActivityA打开ActivityB 2.在B中执行某操作后,同时执行A中的方法 lib下载:eventbus-2.4.0.jar jmmy 1.在EventBusTestActiv ...