HDU-4826 Labyrinth
原题链接
Labyrinth
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 788 Accepted Submission(s): 359
每组数据的第一行输入两个正整数m,n(m<=100,n<=100)。接下来的m行,每行n个整数,分别代表相应格子中能得到金币的数量,每个整数都大于等于-100且小于等于100。
每组测试数据输出一行,输出一个整数,代表根据最优的打法,你走到右上角时可以获得的最大金币数目。
用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相关推荐
- HDU 4826 Labyrinth(DP解法)
Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格, ...
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 2732 Leapin' Lizards (经典网络流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 Your platoon of wandering lizards has entered a ...
- 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 ...
- AC日记——[Hnoi2017]影魔 bzoj 4826
4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
最新文章
- (纪录片)统计的乐趣 The Joy of Stats (2010)
- Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
- jQuery中ajax的4种常用请求方式
- 如何正确应对在线故障
- 如何理解signal函数声明
- java session持久化_Session的生命周期和持久化
- 手把手教你将pyqt程序打包成exe(2)
- 《Effective Java》读书笔记 Item 1:考虑静态工厂方法,而不是构造器
- 前端学习(3343):ant design中导航使用
- mysql 合并相加_mysql 多条记要判断相加减合并一条
- vue组件弹出框点击显示隐藏
- Extjs4.1.x使用Application动态按需加载MVC各模块
- 数字音频分析和处理系统
- 03-【nginx】nginx源码分析--proxy模式下nginx的自动重定向auto_redirect
- 批量保存网页_一键保存网页图片!macOS自带神器,比《快捷指令》还好用
- mac sz rz file tras
- python等高线绘制_用matplotlib画等高线图详解
- VS2013之error C3130 内部编译器错误的解决
- Android Room 数据库最佳入门教程
- Linux审计以及主机的入侵检测系统HIDS编写
热门文章
- 创建ArrayList对象,添加5个元素,使用Iterator遍历输出
- Citrix PVS7.6 测试调试
- 牛客网刷题——JAVA
- Unity 旋转角度计算
- VMware安装_CentOS 7.x系统
- 51单片机点亮LED灯、流水灯
- vue-cli从2升级到3报错error 404 Not Found: @wry/context@^0.4.0
- 富集分析(GO、KEGG、GSEA)
- linux上删除rime方案_Linux中Rime输入法安装使用小结
- LuoguP2123 皇后游戏