【poj 2948】Martian Mining 题意&题解&代码(C++)
2016-04-12 16:19
477 查看
题目链接:
http://poj.org/problem?id=2948
题意:
NASA在火星发现了一个矿场矩阵。矩阵中的每个单元格都有两种矿Yeyenum和Bloggium。我们知道每个单元格中这两种矿的数量。NASA决定在北边建造Bloggium的矿石精炼厂,在西边建造Yeyenum的矿石精炼厂。于是需要我们把bloggium矿石向北运,把Yeyenum矿石向西运。但由于矿石的不稳定在建造传送带时有特殊要求即Yeyenum矿石只能在东西向的传送带上运,bloggium矿石只能在南北向(南北组)的传送带上运。求建造传送带后两种矿石最多总共收集多少。
题解:
因为一种矿石只能在一种传送带上运,因此每修一个方向的传送带,最好直接一条路全修一种方向,否则相当于浪费。例如在(3,3)点修向北的轨道,那么在(2,3),(1,3)都要修向北的轨道才能使价值最优。
用dp[i][j]表示以i和j为右下角时的最优答案,那么根据上述性质我们可以发现转移方程
其中suma[i][j]表示a[i][x] (1<=x<=j)的总和,sumb[i][j]表示b[x][j] (1<=x<=i)的总和。预处理出来即可
代码:
http://poj.org/problem?id=2948
题意:
NASA在火星发现了一个矿场矩阵。矩阵中的每个单元格都有两种矿Yeyenum和Bloggium。我们知道每个单元格中这两种矿的数量。NASA决定在北边建造Bloggium的矿石精炼厂,在西边建造Yeyenum的矿石精炼厂。于是需要我们把bloggium矿石向北运,把Yeyenum矿石向西运。但由于矿石的不稳定在建造传送带时有特殊要求即Yeyenum矿石只能在东西向的传送带上运,bloggium矿石只能在南北向(南北组)的传送带上运。求建造传送带后两种矿石最多总共收集多少。
题解:
因为一种矿石只能在一种传送带上运,因此每修一个方向的传送带,最好直接一条路全修一种方向,否则相当于浪费。例如在(3,3)点修向北的轨道,那么在(2,3),(1,3)都要修向北的轨道才能使价值最优。
用dp[i][j]表示以i和j为右下角时的最优答案,那么根据上述性质我们可以发现转移方程
dp[i][j]=max(dp[i-1][j]+suma[i][j],dp[i][j-1]+sumb[i][j]);
其中suma[i][j]表示a[i][x] (1<=x<=j)的总和,sumb[i][j]表示b[x][j] (1<=x<=i)的总和。预处理出来即可
代码:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> using namespace std; int n,m,a[505][505],b[505][505],suma[505][505],sumb[505][505],dp[505][505]; int main() { while(scanf("%d%d",&n,&m)!=EOF) { if (n==0&&m==0) return 0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&a[i][j]); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&b[i][j]); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { suma[i][j]=suma[i][j-1]+a[i][j]; sumb[i][j]=sumb[i-1][j]+b[i][j]; } memset(dp,0,sizeof(dp)); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) dp[i][j]=max(dp[i-1][j]+suma[i][j],dp[i][j-1]+sumb[i][j]); printf("%d\n",dp [m]); } }
相关文章推荐
- 1. Spring.net入门Demo
- java 请求 google translate
- eclipse如何优化构建的速度(Building)
- C#基础概念 从新理解继承多态
- c++第三次上机实验
- HibernateProxy异常处理 java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
- PHP json_encode 中文乱码解决方法
- java jdbc(二)各接口介绍--Connection,Statement,ResultSet,PreparedStatement,ResultSetMetaData,DatabaseMetaDa
- java webSocket 开发,个人心得,有什么改进的地方可以提出来
- Java反射机制学习1
- [Java] Collections的简单运用
- 一个编程菜鸟向资深攻城狮的进化之路
- WORD中储存vba代码,把excel数据写入word并保存。
- jdk6下载地址
- c++实验3-2
- Caused by: java.lang.OutOfMemoryError: PermGen space
- JAVA增删改查XML文件
- Matlab从多维正态分布中随机抽取样本:mvnrnd
- 常见的排序算法C++实现
- c#反射机制