大航海 解题报告

大航海

Time Limit:1000MS  Memory Limit:65536K

Description

你的船队进入了一个河道,河道的两边布满繁华的港口。你和你的手下都非常渴望马上进入这些港口进行贸易,以获得利润,但是流域的管理者却告诉你在他们的地盘航行必须遵守他们的法令。河道左岸的 N 个港口被编号为 L1,L2...LN,河道右岸的 M 个港口被编号为 R1,R2...RM。法令规定如果你进入过左岸(右岸)的某个港口 Li(Ri),你就不能再进入编号为 L1,L2...Li(R1,R2...Ri)的港口。法令还规定了 P 条航道,每条航道(i,j)表示你可以从 Li 港驶到 Rj 港,或者从 Rj 港驶到 Li 港。其它港口之间的航行都是不被允许的。一开头你可以选择停靠在任意一个港口,并且任何时候都可以离开这个流域。一旦离开了这个流域,你就不会再回来了。

给定进入每个港口能获取的利润,你能够迅速估计你最多总共能够获得多少利润?

Input

每个输入文件只包含一组数据。

每个文件的第一行包含三个正整数 N,M,P。1≤N,M≤10000,0≤P≤500000。

以下 N 行,每行一个非负整数,第 i 行表示在港口 Li 能获得的利润。以下 M 行,每行一个非负整数,第 i 行表示在港口 Ri 能获得的利润。所有利润的总和不会超过 10^9。

再下来 P 行,每行两个整数 i,j,表示一个航道。

Output

输出一行,表示能够获得的最大的总利润。

Sample Input

3	3	5
5		
0		
10		
10		
10		
0		
1	2	
3	1	
2	2	
2	3	
3	2	

Sample Output

30

Source

GDKOI2007


刚开始看这道题的时候我是想到用网络流的,不过有一些性质,可以将这题简化。

从这道题的信息,我们可以看出行走路线中,左边的港口和右边的港口编号都是单调递增的。因此,我们可以利用这一个性质去构造一个dp方程。

比较麻烦的是港口分左右两岸,处理上我们不妨分两个dp数组解决。

先单独考虑左岸港口,由于必须保证港口编号递增,将左岸港口从1到n升序枚举;

若左岸i港口与右岸k港口相连,那么显然

dp_left[i]=max(dp_left[i],dp_right[k]+profit[i][k])

由于i是升序的,方程无后效性。

再考虑右岸港口在第一重循环枚举左岸港口的情况下,升序枚举与i相连的右岸港口j,则:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值