[GRYZ2015]工业时代

试题描述

小FF的第一片矿区已经开始运作了, 他着手开展第二片矿区……
小FF的第二片矿区, 也是”NewBe_One“计划的核心部分, 因为在这片矿区里面有全宇宙最稀有的两种矿物,科学家称其为NEW矿和BE矿。
矿区是被划分成一个n*m的矩形区域。 小FF探明了每一小块区域里的NEW矿和BE矿的蕴藏量, 并且小FF还在矿区的北边和西边分别设置了NEW矿和BE矿的收集站。你的任务是设计一个管道运输系统,使得运送的NEW矿和BE矿的总量最多。
管道的型号有两种,一种是东西向,一种是南北向。在一个格子内你能建造一种管道,但不能两种都建。如果两个同类型管道首位相接,它们就可以被连接起来。
另外这些矿物都十分不稳定,因此它们在运送过程中都不能拐弯。这就意味着如果某个格子上建有南北向管道,但是它北边的格子建有东西向管道,那么这根南北向管道内运送的任何东西都将丢失。进一步地,运到NEW矿收集站的BE矿也会丢失,运到BE矿收集站的NEW矿也会丢失。

输入格式

第一行包含两个整数n和m,表示矿区大小。

以下n行,每行m个整数,其中第i行第j个整数G[ i , j ] 描述各个格子上的BE矿数量。接下来以类似的矩阵表示各个格子上的NEW矿数量。

输出格式

仅一个整数, 表示最多可以采集到的NEW矿和BE矿的总量。

输入样例

4 40 0 10 91 3 10 04 2 1 31 1 20 010 0 0 01 1 1 300 0 5 55 10 10 10

输出样例

98

数据范围

对于30%的数据: 0<= n,m <=100; 对于100%的数据: 0<= n, m <=1000;    0<= G[ i, j ] <=1000.

思路

  动态规划。到达此点的可能性路线有两个,要么纵坐标减一这是铺NEW的,它本身联通所有横线上的铺BE;或者是横坐标减一铺BE,它本身联通所有纵线上的铺NEW。反之他一定要铺一种吧。

var    i,j,k,n,m,tem:longint;    
    f,be,new:array[0..2000,0..2000] of longint; 
function max(a,b:longint):longint; 
begin    
if a<b then exit(b) else exit(a); 
end;   
begin    
assign(input,'industry.in');reset(input);    
assign(output,'industry.out');rewrite(output);   
readln(n,m);   
for i:=1 to n do     
for j:=1 to m do       
begin        
read(tem);        
be[i,j]:=be[i,j-1]+tem;       
end;    
for i:=1 to n do     
for j:=1 to m do       
begin        
read(tem);        
new[i,j]:=new[i-1,j]+tem;       
end;    
for i:=1 to n do     
for j:=1 to m do        
f[i,j]:=max(f[i-1,j]+be[i,j],f[i,j-1]+new[i,j]);   
writeln(f[n,m]);    
close(input);close(output); 
end.
View Code
原文地址:https://www.cnblogs.com/yangqingli/p/4933107.html