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. rsync 指定端口拷贝

    rsync -aP -e 'ssh -p 2288' ssh-audit.dat 172.18.18.31:/opt/freesvr/audit/sshgw-audit/sbin

  2. CPU31X-2DP通过DP网络连接远程IO站

    一.远程IO站介绍 二.该DP网络系统结构 三.组态DP主站 1.组态机架硬件配置 2.设置profibus属性,主站地址为2,如下图 3.完成主站组态 四.组态远程IO从站ET200M 1.接口模块 ...

  3. web网站嵌入QQ临时会话代码 ----转载----小技巧

    第一种 <img style="CURSOR: pointer" onclick="javascript:window.open('tencent://messag ...

  4. 摄像头脸部识别 (1)opencv 抓取视频数据并保存

    摄像头脸部识别 (1)opencv 抓取视频数据并保存 基于python 和 opencv 3.4.0 (兼容 opencv 2.X 参考注释),详细如代码 import numpy as np im ...

  5. 跟我一起学JQuery插件开发教程

    在逛codeproject网站的时候,突然看到一篇文章:How to write plugin in Jquery. 如果对E文好的同学 ,可以看上面的连接.现在我把上面网站的及结合自己的想法写这篇文 ...

  6. Eclipse项目分组管理

    对于eclipse相信对于一个java开发人员,一定不陌生.eclipse可以通过工作空间(Workspace)将不同的项目进行分开管理,相信这一点大家一定很熟悉,用过idea的小伙伴,一定发现了,i ...

  7. 第一本的java 的小总结

    1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本  2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文 ...

  8. Micropython教程之TPYBoard制作蓝牙+红外循迹小车

    1.实验目的 学习在PC机系统中扩展简单I/O接口的方法. 进一步学习编制数据输出程序的设计方法. 学习蓝牙模块的接线方法及其工作原理. 学习L298N电机驱动板模块的接线方法. 学习蓝牙控制小车的工 ...

  9. Linux(Cent OS7.2)下启动停止memcached方法及ps命令使用讲解

    Linux下,以Cent OS7.2为例,安装memcached后的启动方法很简单,这里我们使用yum源安装. 首先查找yum源版本库的memchaced安装包, yum list | grep me ...

  10. linux下的磁盘挂载

    将新的磁盘安装在服务器上后,怎么挂载到现在的服务器上呢? 1.查询是否已经分配磁盘 fdisk -l 这里因为测试,只是挂载了10G的硬盘 2.发现有磁盘/dev/sdb.然后使用fdisk命令建立分 ...