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)的更多相关文章

  1. 2014百度之星第三题Xor Sum(字典树+异或运算)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  2. 2014 百度之星 题解 1004 Labyrinth

    Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...

  3. 2014百度之星预赛(第二场)——Best Financing

    2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...

  4. 2014百度之星资格赛——Disk Schedule

    2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...

  5. 2014百度之星初赛第二场hdu 4831 Scenic Popularity

    Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. 2014年百度之星资格赛第四题Labyrinth

    Problem Description 度度熊是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫.该迷宫仅仅能从矩阵左上角第一个方格開始走.仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...

  7. 2014百度之星资格赛 1004:Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. 2014百度之星第一题Energy Conversion

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. session_cache_limiter 及 session 常见问题

    我点击后退按钮,为什么之前填写的东西不见 这是因为你使用了session. 解决办法: PHP代码:-------------------------------------------------- ...

  2. #include <boost/regex.hpp>

    boost C++的正则表达式库boost.regex可以应用正则表达式于C++.正则表达式大大减轻了搜索特定模式字符串的负担,在很多语言中都是强大的功能. boost.regex库中两个最重要的类是 ...

  3. bash 学习笔记(一)

    尽量使用printf而不要用echo(echo再不同情况下语义不同) 整数%d,小数后6位%f,科学计数法 %e,16进制 %x 宽度限制 %8s %-15s 正数朝右对齐 负数朝左对齐:%04d\n ...

  4. JS框架~Angularjs

    无意中看到anytao的项目,工作台,使用了Angularjs框架,感觉在前端表现上用户体验比较好,于是就简单看了一下,原来使用很简单,或者说,人家把代码封装的很好,以至于开发人员调用时比较简单,呵呵 ...

  5. SHUTDOWN: Active processes prevent shutdown operation

    在使用shutdown immediate关闭数据库时hang住,查看alert 日志,遭遇了SHUTDOWN: Active processes prevent shutdown operation ...

  6. lhgDialog

    应用到你的项目 如果您使用独立版本的lhgDialog窗口组件,您只需在页面head中引入lhgcore.lhgdialog.min.js文件,4.1.1+版本做了修改可以和jQuerya库同时引用, ...

  7. JAVA程序猿面试题汇总

    (此话题将不断更新,请留意) 第一,谈谈final, finally, finalize的差别. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.finally是异常 ...

  8. css3 transiton

    div { width:100px; height:100px; background:yellow; transition-property:width; transition-duration:1 ...

  9. meta 标签整理

    <!-- 声明文档 --> <meta charset='utf-8'> <!-- 指示IE以目前可用的最高模式显示内容 --> <meta http-equ ...

  10. jsonsql

    http://www.trentrichardson.com/jsonsql/ 可以对json数组用sql语法进行操作,主要是查询取指定字段.条件.指定字段排序及获取多少条数据,返回值json. js ...