1036 - A Refining Company
| Time Limit: 3 second(s) | Memory Limit: 32 MB |
Its year 2200, planet Earth is out of resources and people are relying on the resources from other planets. There are several Refining Companies who collect these resources from other planets and bring them back to Earth. The task may sound simple, but in reality it's a challenging job. The resources are scattered and after collecting them, they have to be taken to a place where they can be refined. Since some minerals are extremely dangerous, the whole process should be done very carefully. A single tiny mistake can cause a massive explosion resulting in a huge loss.
You work in such a company who collects Uranium and Radium from planet Krypton. These minerals are used for generating powers. For simplicity you have divided planet Krypton into cells that form a matrix of m rows and n columns, where the rows go from east to west and the columns go from north to south. Your advanced mine detector has detected the approximate amount of Radium and Uranium in each cell. Your company has built two refining factories, one in West and the other in North. The factory in North is used to refine Radium and the factory in West is used to refine Uranium. Your task is to design the conveyor belt system that will allow them to mine the largest amount of minerals.
There are two types of conveyor belts: the first moves minerals from east to west, the second moves minerals from south to north. In each cell you can build either type of conveyor belt, but you cannot build both of them in the same cell. If two conveyor belts of the same type are next to each other, then they can be connected. For example, the Radium mined at a cell can be transported to the Radium refinement factory via a series of south-north conveyor belts.
The minerals are very unstable, thus they have to be brought to the factories on a straight path without any turns. This means that if there is a south-north conveyor belt in a cell, but the cell north of it contains an east-west conveyor belt, then any mineral transported on the south-north conveyor belt will be lost. The minerals mined in a particular cell have to be put on a conveyor belt immediately; in the same cell (thus they cannot start the transportation in an adjacent cell). Furthermore, any Radium transported to the Uranium refinement factory will be lost, and vice versa.
Your program has to design a conveyor belt system that maximizes the total amount of minerals mined, i.e., the sum of the amount of Radium transported to the Radium refinery and the amount of Uranium to the Uranium refinery.
Input
Input starts with an integer T (≤ 10), denoting the number of test cases.
Each case begins with a blank line and two integers: m - the number of rows, and n - the number columns (1 ≤ m, n ≤ 500). The next m lines describe the amount of Uranium that can be found in the cells. Each of these m lines contains n integers. The first line corresponds to the northernmost row; the first integer of each line corresponds to the westernmost cell of the row. The integers are between 0 and 1000. The next m lines describe in a similar fashion the amount of Radium found in the cells. Data set is huge, so use faster i/o methods.
Output
For each case of input you have to print the case number and the maximum amount of minerals you can collect.
Sample Input |
Output for Sample Input |
|
2 4 4 0 0 10 9 1 3 10 0 4 2 1 3 1 1 20 0 10 0 0 0 1 1 1 30 0 0 5 5 5 10 10 10 2 3 5 10 34 0 0 0 0 0 0 50 0 0 |
Case 1: 98 Case 2: 50 |
Note
Dataset is huge. Use faster I/O methods.
题意:给你两种方案,一种是从右往左的,一种是从下往上的,然后如果在某个点是向上的那么要一直到顶端,同理向左的,并且这写方案不能交叉,问最大能运多少。
dp[i][j]标是在大小为前i行前j列的最大能运输的,我们先处理所给的两个矩阵,第一个是右到左,我们处理没一行的前缀和,另一个是下到上,我们处理每一列的前缀和。
方程: dp[i][j] = max(dp[i-1][j] + __a[i][j],dp[i][j-1] + __b[i][j]);表示当前的位置要么向上要么向左。
1 #include<stdio.h>
2 #include<algorithm>
3 #include<stdlib.h>
4 #include<iostream>
5 #include<math.h>
6 #include<string.h>
7 #include<queue>
8 using namespace std;
9 typedef long long LL;
10 int a[600][600];
11 int b[600][600];
12 int dp[600][600];
13 int __a[600][600];
14 int __b[600][600];
15 int main(void)
16 {
17 int T;
18 scanf("%d",&T);
19 int __ca=0;
20 while(T--)
21 {
22 __ca++;
23 int n,m;
24 scanf("%d %d",&n,&m);
25 int i,j ;
26 for(i = 1; i <= n; i++)
27 {
28 for(j = 1; j <= m; j++)
29 {
30 scanf("%d",&a[i][j]);
31 }
32 }
33 for(i = 1; i <=n ; i++)
34 {
35 for(j = 1; j <= m; j++)
36 {
37 scanf("%d",&b[i][j]);
38 }
39 }
40 memset(__a,0,sizeof(__a));
41 memset(__b,0,sizeof(__b));
42 memset(dp,0,sizeof(dp));
43 for(i = 1; i <= n;i++)
44 {
45 for(j = 1; j <=m; j++)
46 __a[i][j]=__a[i][j-1]+a[i][j];
47 }
48 for( i = 1; i <= m; i++)
49 {
50 for(j = 1; j <= n; j++)
51 __b[j][i]=__b[j-1][i]+b[j][i];
52 }int maxx=0;
53 for(i = 1; i <= n ; i++)
54 {
55 for( j = 1; j <=m; j++)
56 {
57 dp[i][j] = max(dp[i-1][j] + __a[i][j],dp[i][j-1] + __b[i][j]);
58 }
59 }
60 printf("Case %d: %d\n",__ca,dp[n][m]);
61 }return 0;
62 }
1036 - A Refining Company的更多相关文章
- lightoj 1036 - A Refining Company(简单dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1036 题解:设dp[i][j]表示处理到(i,j)点时的最大值然后转移显然是 ...
- Light OJ 1036 - A Refining Company
题目大意: 一个m*n的矩阵,里面有两种矿物质铀和镭,现在要把铀和镭运送到指定位置.北边是炼镭厂,西边是了炼铀厂. 现在要建立传送带,传送带有两种,一种是从东到西,另一种是从南到北,传送带不能交叉,并 ...
- A Refining Company LightOJ - 1036
A Refining Company LightOJ - 1036 描述好长啊... 题意:在m*n的矩阵上,每一格摆一个向上或者向左的传送带(不能同时摆,只能摆一个).同时,每一格有两种物资Uran ...
- LightOJ1036 A Refining Company(DP)
题目大概说有一个n*m的格子地图,每个格子有铀或者镭矿.地图最北面的镭矿加工厂,最西面有铀矿加工厂,而要通过在格子里铺设由南向北(镭)或由东向西(铀)的轨道来送矿物到加工厂.一个格子只能铺设一种轨道, ...
- dp百题大过关(第一场)
好吧,这名字真是让我想起了某段被某教科书支配的历史.....各种DP题层出不穷,不过终于做完了orz 虽然各种手糊加乱搞,但还是要总结一下. T1 Monkey Banana Problem 这 ...
- 【hihoCoder】1036 Trie图
题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...
- Elasticsearch索引(company)_Centos下CURL增删改
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...
- BZOJ 1036: [ZJOI2008]树的统计Count [树链剖分]【学习笔记】
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 14302 Solved: 5779[Submit ...
- Windows Locale Codes - Sortable list(具体一个语言里还可具体细分,中国是2052,法国是1036)
Windows Locale Codes - Sortable list NOTE: Code page is an outdated method for character encoding, y ...
随机推荐
- 也谈string.Join和StringBuilder的性能比较
前几天在园子里面看到一篇讲StringBuilder性能的文章.文章里面给出了一个测试用例,比较StringBuilder.AppendJoin和String.Join的性能.根据该测试结果,&quo ...
- 关于Stream的使用
引言 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API 对集合数据进行操作,就类似于使用 ...
- Jumpserver堡垒机容器化部署
JumpServer 是符合 4A 的专业运维安全审计系统. 前提条件 已部署docker Jumpserver 对外需要开放 80 443 和 2222 端口 服务器.数据库.redis 等依赖组件 ...
- Linux磁盘分区(一)之fdisk命令
Linux磁盘分区(一)之fdisk命令转自:https://www.cnblogs.com/machangwei-8/p/10353683.html 一.fdisk 的介绍fdsik 能划分磁盘成为 ...
- Git上项目代码拉到本地方法
1.先在本地打开workspace文件夹,或者自定义的文件夹,用来保存项目代码的地方. 2.然后登陆GitHub账号,点击复制项目路径 3.在刚才文件夹下空白处点击鼠标右键,打开Git窗口 4.在以下 ...
- oracle first_value,last_valus
first_value和last_value 是用来去分析函数窗口中对应列的第一个值和最后一个值的函数. 语法如下: first_value(col [ignore NULLS]) over([PAR ...
- vue引入d3
单页面使用 cnpm install d3 --save-dev 指定版本安装 cnpm install d3@6.3.1 -S <script> import * as d3 from ...
- vue2 页面路由
vue官方文档 src/views/Login.vue <template> <div> <h2>登录页</h2> </div> </ ...
- UIWindow介绍
1.作为容器,包含app所要显示的所有视图 3.与UIViewController协同工作,方便完成设备方向旋转的支持 1.addSubview 2.rootViewController 三.Wind ...
- 主流微服务一站式解决方案Spring Cloud Alibaba入门看这篇就足够了
学习路线 **本人博客网站 **IT小神 www.itxiaoshen.com 生态概述 架构演进 什么是微服务 https://martinfowler.com/microservices/ Mic ...