1360 xth 的玫瑰花

1360 xth 的玫瑰花
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题解
题目描述 Description
这天是rabbit 的生日前夕,Xth 来到花店,要给他的rabbit 买玫瑰花,为了保证质
量,他跟花店老板——小菜儿同学要求自己到花田采摘。小菜儿灰常希望早日见到
暖熊(xth 儿子的小名),于是他决定帮忙。
小菜儿告诉xth,花田是一个n ∗ m的矩形区域,里面有红玫瑰和黑玫瑰两种玫瑰。
Xth 探明了每一块小区域内红玫瑰和黑玫瑰的种植量,并且还在花田的北边和西边
分别设置了红玫瑰和黑玫瑰的收集站(地图上上北下南左西右东)。你的任务是设
计一个运输线系统,使得运送的红玫瑰和黑玫瑰的总量最多。
运输线有两种,一种是东西向,一种是南北向。在一个格子内你能建造一种运输线,
但不能两种都建。如果两个同类型运输线首尾相接,它们就可以被连接起来。
另外,这些玫瑰都十分不稳定,因此它们在运送过程中都不能拐弯。这就意味着如
果某个格子上建有南北向运输线,但是它北边的格子建有东西向运输线。那么这条
南北向运输线内运送的任何东西都将丢失。进一步地,运到红玫瑰收集点的黑玫瑰
会丢失,运到黑玫瑰收集点的红玫瑰也会丢失。

输入描述 Input Description
第一行包含两个整数n和m,表示花田大小。 以下n行,每行m个整数,其中第i行
第j个整数g[ i ,j ] 描述各个格子上的黑玫瑰数量。接下来以类似的矩阵表示各个格
子上的红玫瑰数量。

输出描述 Output Description
仅一个整数, 表示最多可以采集到的红玫瑰和黑玫瑰的总量。

样例输入 Sample Input
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

样例输出 Sample Output
98

数据范围及提示 Data Size & Hint
对于30%的数据: 0 ≤ n, m ≤ 100;
对于100%的数据: 0 ≤ n,m ≤ 1000;
0 ≤ g[ i,j ] ≤ 1000.

由题意信息知,管子不能弯曲,要最大化利用的话,就一条路走到头(管子不一定从边界通入,可以从中间任意一个地方通入)
举个比较特殊的例子:
— 丨 丨丨
—— 丨丨
——— 丨
————(假设这样通入为最大数量) 4×4
所以。。。。。。。看代码
program df;
var i,j,n,m,x,y,z,k,t:longint;
a,b,s1,s2:array[0..1000,0..1000] of longint;
f:array[0..1001,0..1001,0..1] of longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x)
else exit(y);
end;

begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
s1[i,j]:=s1[i,j-1]+a[i,j]; //东边一直通到西边的黑玫瑰数量
end;
readln;
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
read(b[i,j]);
s2[i,j]:=s2[i-1,j]+b[i,j]; //南边一直通到北边的红玫瑰数量
end;
readln;
end;
for i:=1 to n do
for j:=1 to m do
begin
f[i,j,0]:=max(f[i,j-1,0],f[i,j-1,1])+s2[i,j];
f[i,j,1]:=max(f[i-1,j,0],f[i-1,j,1])+s1[i,j];
end; //规划路线比较最值
writeln(max(f[n,m,1],f[n,m,0]));
end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值