原题链接

Labyrinth

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 788    Accepted Submission(s): 359

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[i][j]表示到走到(i,j)的最大金币数,因为不能往左走所以可以一列一列的求。假设dp[][j-1],也就是第j-1列求完,接下来维护两个数组d1[i][j], d2[i][j], d1表示从上走到下的最大金币数,d2表示从下走到上的最大金币数,d1[i][j] = max(d1[i-1][j], dp[i][j-1]) + num[i][j], d2[i][j] = max(d2[i+1][j], dp[i-1][j]) + num[i][j].

那么dp[i][j] = max(dp[i-1][j], max(d1[i-1][j], d2[i+1][j])) + num[i][j];

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 1005
#define INF 1e9
using namespace std;
typedef long long ll;int num[105][105], dp[105][105], d1[105][105], d2[105][105];
int main(){//   freopen("in.txt", "r", stdin);int t, cas = 0;scanf("%d", &t);while(t--){int n, m, s = 0;scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++){scanf("%d", &num[i][j]);s += num[i][j];}if(n == 1){printf("Case #%d:\n%d\n", ++cas, s); continue;}for(int i = 1; i <= n; i++)dp[i][1] = dp[i-1][1] + num[i][1];for(int j = 2; j <= m; j++){for(int i = 1; i <= n; i++){if(i == 1)d1[i][j] = num[i][j] + dp[i][j-1];elsed1[i][j] = max(dp[i][j-1], d1[i-1][j]) + num[i][j];}for(int i = n; i >= 1; i--){if(i == n)d2[i][j] = num[i][j] + dp[i][j-1];elsed2[i][j] = max(dp[i][j-1], d2[i+1][j]) + num[i][j];}for(int i = 1; i <= n; i++){if(i == 1)dp[i][j] = max(d2[i+1][j], dp[i][j-1]) + num[i][j];else if(i == n)dp[i][j] = max(dp[i][j-1], d1[i-1][j]) + num[i][j];elsedp[i][j] = max(dp[i][j-1], max(d1[i-1][j], d2[i+1][j])) + num[i][j];}          }   printf("Case #%d:\n%d\n", ++cas, dp[1][m]); }return 0;
} 

HDU-4826 Labyrinth相关推荐

  1. HDU 4826 Labyrinth(DP解法)

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

  2. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  3. hdu 2732 Leapin' Lizards (经典网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 Your platoon of wandering lizards has entered a ...

  4. HDU 1702 ACboy needs your help again!(模拟两种数据结构)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1702 ACboy needs your help again! Time Limit: 1000/10 ...

  5. AC日记——[Hnoi2017]影魔 bzoj 4826

    4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...

  6. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  7. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  8. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  9. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  10. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

最新文章

  1. (纪录片)统计的乐趣 The Joy of Stats (2010)
  2. Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
  3. jQuery中ajax的4种常用请求方式
  4. 如何正确应对在线故障
  5. 如何理解signal函数声明
  6. java session持久化_Session的生命周期和持久化
  7. 手把手教你将pyqt程序打包成exe(2)
  8. 《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器
  9. 前端学习(3343):ant design中导航使用
  10. mysql 合并相加_mysql 多条记要判断相加减合并一条
  11. vue组件弹出框点击显示隐藏
  12. Extjs4.1.x使用Application动态按需加载MVC各模块
  13. 数字音频分析和处理系统
  14. 03-【nginx】nginx源码分析--proxy模式下nginx的自动重定向auto_redirect
  15. 批量保存网页_一键保存网页图片!macOS自带神器,比《快捷指令》还好用
  16. mac sz rz file tras
  17. python等高线绘制_用matplotlib画等高线图详解
  18. VS2013之error C3130 内部编译器错误的解决
  19. Android Room 数据库最佳入门教程
  20. Linux审计以及主机的入侵检测系统HIDS编写

热门文章

  1. 创建ArrayList对象,添加5个元素,使用Iterator遍历输出
  2. Citrix PVS7.6 测试调试
  3. 牛客网刷题——JAVA
  4. Unity 旋转角度计算
  5. VMware安装_CentOS 7.x系统
  6. 51单片机点亮LED灯、流水灯
  7. vue-cli从2升级到3报错error 404 Not Found: @wry/context@^0.4.0
  8. 富集分析(GO、KEGG、GSEA)
  9. linux上删除rime方案_Linux中Rime输入法安装使用小结
  10. LuoguP2123 皇后游戏