Labyrinth

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

Total Submission(s): 668    Accepted Submission(s): 299

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
/*
dp。第一列最大直接求出,因为只有一种走法(向下)。然后后面有两种、==向下|| 向上。可推到出状态方程为
dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + a[i][j] (向下)
dp[i][j] = max(dp[i+1][j], dp[i][j-1]) + a[i][j] (向上)
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <utility> #define INF 0xfffffff
#define max1 110 int a[max1][max1], dp[max1][max1], dp1[max1], dp2[max1]; int max(int a, int b) {
return a>b?a:b;
} int main() {
int t, flag = 1;
scanf("%d",&t);
while (t --) {
memset(a, 0, sizeof(a));
int m, n;
scanf("%d%d",&m, &n);
for (int i = 1; i<=m; i++)
for (int j = 1; j<=n; j++) scanf("%d",&a[i][j]);
memset(dp, 0, sizeof(dp));
for (int i = 2; i<=m; i++) {
a[i][1] = a[i][1] + a[i-1][1];
}
dp1[0] = dp2[0] = dp1[m+1] = dp2[m+1] = -9999999;
for (int j = 2; j<=n; j++) {
//向下
for (int i = 1; i<=m; i++) {
dp1[i] = max(dp1[i-1], a[i][j-1]) + a[i][j];
}
//向上
for (int i = m; i>=1; i--) {
dp2[i] = max(dp2[i+1], a[i][j-1]) + a[i][j];
}
for (int i = 1; i<=m; i++) {
a[i][j] = max(dp1[i], dp2[i]);
}
}
printf("Case #%d:\n%d\n",flag++, a[1][n]);
}
return 0;
}

HDU_4826的更多相关文章

随机推荐

  1. 为什么epoll会那么高效

    参考(原文简直超赞):https://zhidao.baidu.com/question/687563051895364284.html下面是我结合原文写的,为了便于自己理解:关于阻塞和非阻塞的理解可 ...

  2. SDP(0):Streaming-Data-Processor - Data Processing with Akka-Stream

    再有两天就进入2018了,想想还是要准备一下明年的工作方向.回想当初开始学习函数式编程时的主要目的是想设计一套标准API給那些习惯了OOP方式开发商业应用软件的程序员们,使他们能用一种接近传统数据库软 ...

  3. php运行C++程序

    linux命令:gcc hello.cpp -lstdc++ -o hello.o php代码: <?php $command="./hello.o "; passthru( ...

  4. 通过 kms 激活 office 2016

    1.管理员模式打开cmd,并切换到office的安装路径 注:office2016默认安装在C:\Program Files\Microsoft Office\Office16,激活其他office自 ...

  5. xlwt 官网的例子

    from time import * from xlwt.Workbook import * from xlwt.Style import * style = XFStyle() wb = Workb ...

  6. think queue 消息队列初体验

    使用的是tp5  自带的消息队列 thinkphp top里的 消息队列框架 think-queue 这是thinkphp官方团队开发的一个专门支持队列服务的扩展包 消息队列应用场景: 消息队列适用于 ...

  7. pinyin utils

    package cn.itcast.bos.utils;   import java.util.Arrays;   import net.sourceforge.pinyin4j.PinyinHelp ...

  8. 一个IC软件工程师的2017年终工作总结

    相比2016年的波澜起伏,2017多了一份平静和清淡.不过,平静的生活下,总有一颗飞向远方的心. 在这一年将近结束的时候,总结一下自己的工作,生活和学习.也顺便展望一下未来的2018,看看有哪些 美好 ...

  9. TP框架如何开启log日志

    1. 日志的处理工作是由系统自动进行的,在开启日志记录的情况下,会记录下允许的日志级别的所有日志信息. 其中,为了性能考虑,SQL日志级别必须在调试模式开启下有效,否则就不会记录. 系统的日志记录由核 ...

  10. php mysql语句预编译(preparestatement)

    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库.预留的值使用参数 "?" 标记 .例如: ...