题目大概说有一个n*m的格子地图,每个格子有铀或者镭矿。地图最北面的镭矿加工厂,最西面有铀矿加工厂,而要通过在格子里铺设由南向北(镭)或由东向西(铀)的轨道来送矿物到加工厂。一个格子只能铺设一种轨道,即要嘛运送铀要嘛运送镭,不同轨道也不能相交。现在知道地图上各个格子铀和镭的数量,问怎么铺设轨道使送到加工厂的矿物数量最多。

  • 首先明确要运送某一格子的镭矿到北面加工厂,这个轨道肯定是直直连续往上的;而铀矿同理,是水平连续向左的轨道。
  • 另外,因为获得的数量要最多,各个格子肯定都要铺设轨道,反证可知。
  • 然后可以发现,格子(i,j)怎样与格子(0,0)到格子(i-1,j-1)的围成的矩形所有格子的情况毫不相关,这样就考虑DP了:
    1. dp[0][i][j]表示格子(0,0)到格子(i,j)围成的矩形中,格子(i,j)铺设横轨道能获得的最大数量
    2. dp[1][i][j]表示格子(0,0)到格子(i,j)围成的矩形中,格子(i,j)铺设竖轨道能获得的最大数量

转移:

    1. dp[0][i][j]就是从max(dp[0][i-1][j],dp[1][i-1][j])+sum(格子(i,0)的铀数量...格子(i,j)的铀数量)
    2. dp[1][i][j]同理
  • 而最后的结果就是max(dp[0][n-1][m-1],dp[1][n-1][m-1])
 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int U[][],R[][],d[][][];
int main(){
int t,n,m;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d%d",&n,&m);
for(int i=; i<n; ++i){
for(int j=; j<m; ++j){
scanf("%d",&U[i][j]);
}
}
for(int i=; i<n; ++i){
for(int j=; j<m; ++j){
scanf("%d",&R[i][j]);
}
}
memset(d,,sizeof(d));
d[][][]=U[][];
d[][][]=R[][];
for(int i=; i<n; ++i){
for(int j=; j<m; ++j){
if(i== && j==) continue;
if(i==){
int sum=;
for(int k=; k<=j; ++k){
sum+=U[i][k];
}
d[][i][j]=sum; d[][i][j]=max(d[][i][j-],d[][i][j-])+R[i][j];
}else if(j==){
d[][i][]=max(d[][i-][],d[][i-][])+U[i][j]; int sum=;
for(int k=; k<=i; ++k){
sum+=R[k][j];
}
d[][i][j]=sum;
}else{
int sum=;
for(int k=; k<=j; ++k){
sum+=U[i][k];
}
d[][i][j]=max(d[][i-][j],d[][i-][j])+sum; sum=;
for(int k=; k<=i; ++k){
sum+=R[k][j];
}
d[][i][j]=max(d[][i][j-],d[][i][j-])+sum;
}
}
}
printf("Case %d: %d\n",cse,max(d[][n-][m-],d[][n-][m-]));
}
return ;
}

LightOJ1036 A Refining Company(DP)的更多相关文章

  1. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  2. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  3. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  6. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

  9. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. [Android Pro] 关于inputStream.available()方法获取文件的总大小

    reference to :http://hold-on.iteye.com/blog/1017449 如果用inputStream对象的available()方法获取流中可读取的数据大小,通常我们调 ...

  2. September 1st 2016 Week 36th Thursday

    Everything is going on, but don't give up trying. 万事随缘,但不要放弃努力. There are numerous things that we ca ...

  3. Mysql 数据库无法删除 41 错误

    今天删除Mysql 数据库时候,没法删除,直接报错 41: 方法,进入 mysql的安装目录 我的是:D:\tools\Mysql\V76384-01\mysql-advanced-5.6.25-wi ...

  4. grep如何忽略.svn目录,以及如何忽略多个目录

    grep如何忽略.svn目录,以及如何忽略多个目录 这是我在网上看到的文章,不过里面还有问题,我的不支持,需要更换架包 grep -r 'function_name' * (*表示当前目录下所有文件, ...

  5. [转]嵌入式SQC文件编译

      Src Url:http://blog.csdn.net/cws1214/article/details/12996351   A.预编译部分  1.预编译DB2篇 1.1 什么是DB2预编译 在 ...

  6. Pyqt Smtplib实现Qthread多线程发送邮件

    一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接 ...

  7. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  8. poj 3468:A Simple Problem with Integers(线段树,区间修改求和)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 58269   ...

  9. 7z命令行工具

    7z (中文)是优秀开源的压缩解压缩软件(wiki: en  中文),有windows版本与linux版本,最新的9.32版本支持的格式包括: 压缩与解压缩均支持:7z, XZ, BZIP2, GZI ...

  10. [LeetCode] Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...