UVa 1366 - Martian Mining (dp)
本文出自 http://blog.csdn.net/shuangde800
题目链接: 点击打开链接
题目大意
给出n*m网格中每个格子的A矿和B矿数量,A矿必须由右向左运输,B矿必须由下向上运输,管子不能拐弯或者间断。要求收集到的A,B矿总量尽量大。
思路
由题意可知,如果格子(i,j)上选择运输A矿的话,那么i行的1~j就要全部选择A矿。
同理,如果选择B矿,那么第j列上的1~i行要全部选择B矿
所以推出下面的状态转移方程式:
f[i][j][0]表示第i行第j列为右下角顶点的矩形区域内,格子(i,j)上选择运输A矿情况下的最大总和
f[i][j][1]表示第i行第j列为右下角顶点的矩形区域内,格子(i,j)上选择运输B矿情况下的最大总和
那么
f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1]) + sum{第i行的1~j列的A矿之和}
f[i][j][1] = max(f[i][j-1][0], f[i][j-1][1]) + sum{第j列的1~j行的B矿之和};
最终答案是max{f[n][m][0], f[n][m][1]}
代码:
/**==========================================* This is a solution for ACM/ICPC problem** @problem: UVA 1366 - Martian Mining* @type: dp* @author: shuangde* @blog: blog.csdn.net/shuangde800* @email: zengshuangde@gmail.com*===========================================*/#include#include#include#include#include#include #include using namespace std; typedef long long int64; const int INF = 0x3f3f3f3f; const double PI = acos(-1.0); const int MAXN = 130; int m, n; int A[510][510], B[510][510]; int sum_row[510][510], sum_col[510][510]; int f[510][510][2]; int main(){ while(~scanf("%d%d", &n, &m) && n+m){ memset(sum_row, 0, sizeof(sum_row)); memset(sum_col, 0, sizeof(sum_col)); for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j){ scanf("%d", &A[i][j]); sum_row[i][j] = sum_row[i][j-1]+A[i][j]; } for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j){ scanf("%d", &B[i][j]); sum_col[i][j] = sum_col[i-1][j]+B[i][j]; } memset(f, 0, sizeof(f)); for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j){ f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1]) + sum_row[i][j]; f[i][j][1] = max(f[i][j-1][0], f[i][j-1][1]) + sum_col[i][j]; } printf("%d\n", max(f[n][m][0], f[n][m][1])); } return 0; }
UVa 1366 - Martian Mining (dp)相关推荐
- uva 1366 - Martian Mining(dp)
题目链接:uva 1366 - Martian Mining 题目大意:给出n和m,然后给出两种矿的分布,a种只能向上运输,b中只能向下运输,问说最多可以得到多少. 解题思路:dp[i][j]表示矩阵 ...
- UVA 1366 Martian Mining DP
为了方便,记从右到左运输的为A矿,从下到上运输的为B矿. 首先,假如我们在第i行的前k格架了运输管道运输这K个格子的A矿,那么对于i下面的其他行最少都能架上k格管子,因为不架也是浪费,这一片区域的B矿 ...
- 递推DP UVA 1366 Martian Mining
题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...
- UVA - 1366 Martian Mining
问题 https://vjudge.net/problem/UVA-1366 分析 递推DP,dp[i][j]表示右下角坐标[i,j]的矩形能够运出最多的矿物是多少 状态转移: dp[i][j]=ma ...
- poj 2948 Martian Mining (dp)
http://poj.org/problem?id=2948 意:一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少.如图所示,最北边有 ...
- UVA 116 Unidirectional TSP DP
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&p ...
- UVA 1331 Minimax Triangulation DP, 三角剖分
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- uva 10453 - Make Palindrome(dp)
题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...
- UVA 1625 Color Length DP
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
最新文章
- 扩增子分析解读4去嵌合体,非细菌序列,生成代表性序列和OTU表
- [ARM异常]-ARMV8的异步异常(中断)详细介绍
- SNAT和DNAT的区别
- vue项目使用npm run dev 编译到一半不动了
- P2605 [ZJOI2010]基站选址
- ImageLoader实现图片异步加载
- 从一线技术人员到阿里合伙人,主导了去“IOE”,没有他,阿里只能给美国公司打工!...
- java 分层领域模型_Java领域模型 | 学步园
- 破局:滚动率知识在信贷风控中的系统总结
- 杨辉三角形(简明易懂)
- org.springframework.web.context.ContextLoaderListener 解决方案
- verilog实现四位全加器(基于一位全加器)
- java怎么判断素数_java判断是否为素数(质数)的方法
- 我的世界启动时要Java_我的世界启动时Java出现日志怎么办
- Oracle客户端使用
- circos 可视化手册-links 篇
- 大数据运维工程师 base 上海
- VS无法打开项目文件“Web.csproj” -此安装不支持该项目类型问题解决方案
- linux 虚拟机不是全屏显示,Linux系统在虚拟机VirtualBox不能全屏解决办法
- Zero-Shot Learing与Attention Machinism