BSOJ4217 【USACO 2013 Feburary Gold】旅行线路 DP(双路递推)
2016-11-02 17:49
656 查看
4217 -- 【USACO 2013 Feburary Gold】旅行线路
Description
贝西经营着一家旅行社,一天贝西带着几队游客沿着亚马逊河旅行,河的两边分布着一些景点,每个景点都对应着一个观赏值。景点间由一些穿过河流的道路相连(位于河流同一侧的景点间没有直接道路相连),贝西想要设计游客的旅行线路,使得该线路经过的景点的总的观赏值最大。
但是,贝西可能同时带着几个旅行团,贝西希望它给安排的旅行线路不能相交。
两条线路 (a <-> x) 和 (b <-> y) 出现如下情况之一就算相交:
if(a < b and y < x) or (b <a and x < y) or (a = b and x = y).
帮助贝西找出最佳旅行线路,贝西可以从任意景点开始,在任意景点结束。
Input
第一行,三个空格间隔的整数N (1 <= N <= 40,000), M (1 <=M <= 40,000), and R (0<= R <= 100,000) 。N表示河岸左边的景点数,M表示河岸右边的景点数,R表示道路的条数
接下来N行,每行一个整数,表示河岸左边对应景点的观赏值。
接下来M行,每行一个整数,表示河岸右边对应景点的观赏值。
接下来R行,每行两个空格间隔的整数X,Y,表示左岸的X号景点与右岸的Y号景点间有道路直接相连。
(0 <= 观赏值<= 40,000),
Output
一个整数,表示所求最大观赏值。
Sample Input
3 2 4
1
1
5
2
2
1 1
2 1
3 1
2 2
Sample Output
8
初看还以为是图论,但是后来发现是dp。
为了保证它的有序性(不相交),我们sort之后再进行处理,但是我们又发现n^2动规(以景点来转移)会超时,所以我们选择以边来转移。
对于方程我们有两种选择:
这时候被这条边连接的两个点便可以状态转移。我们设DPA[i]表示左边以i结尾的最大收益,DPB[i]表示右边以i结尾的最大收益。得到状态转移方程:存在边<i,j>时 DPA[i]=max{A[i]+DPB[j]} DPB[j]=max{B[j]+DPA[i]}
或者干脆用f[i]来表示最大收益也是可以的
代码如下:
Description
贝西经营着一家旅行社,一天贝西带着几队游客沿着亚马逊河旅行,河的两边分布着一些景点,每个景点都对应着一个观赏值。景点间由一些穿过河流的道路相连(位于河流同一侧的景点间没有直接道路相连),贝西想要设计游客的旅行线路,使得该线路经过的景点的总的观赏值最大。
但是,贝西可能同时带着几个旅行团,贝西希望它给安排的旅行线路不能相交。
两条线路 (a <-> x) 和 (b <-> y) 出现如下情况之一就算相交:
if(a < b and y < x) or (b <a and x < y) or (a = b and x = y).
帮助贝西找出最佳旅行线路,贝西可以从任意景点开始,在任意景点结束。
Input
第一行,三个空格间隔的整数N (1 <= N <= 40,000), M (1 <=M <= 40,000), and R (0<= R <= 100,000) 。N表示河岸左边的景点数,M表示河岸右边的景点数,R表示道路的条数
接下来N行,每行一个整数,表示河岸左边对应景点的观赏值。
接下来M行,每行一个整数,表示河岸右边对应景点的观赏值。
接下来R行,每行两个空格间隔的整数X,Y,表示左岸的X号景点与右岸的Y号景点间有道路直接相连。
(0 <= 观赏值<= 40,000),
Output
一个整数,表示所求最大观赏值。
Sample Input
3 2 4
1
1
5
2
2
1 1
2 1
3 1
2 2
Sample Output
8
初看还以为是图论,但是后来发现是dp。
为了保证它的有序性(不相交),我们sort之后再进行处理,但是我们又发现n^2动规(以景点来转移)会超时,所以我们选择以边来转移。
对于方程我们有两种选择:
这时候被这条边连接的两个点便可以状态转移。我们设DPA[i]表示左边以i结尾的最大收益,DPB[i]表示右边以i结尾的最大收益。得到状态转移方程:存在边<i,j>时 DPA[i]=max{A[i]+DPB[j]} DPB[j]=max{B[j]+DPA[i]}
或者干脆用f[i]来表示最大收益也是可以的
代码如下:
#include<iostream> #include<iomanip> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll n,m,r,cnt=0,maxx=0,a[80007]={0},f[80007]={0}; struct node{ll fr,to;}e[200007]={0}; bool cmp(node a,node b) { return (a.fr<b.fr)||(a.fr==b.fr&&a.to<b.to); } int main(){ scanf("%lld%lld%lld",&n,&m,&r); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); for(int i=1;i<=m;i++) scanf("%lld",&a[i+n]); ll x,y; for(ll i=1;i<=r;i++) { scanf("%lld%lld",&x,&y); e[++cnt].fr=x; e[cnt].to=y+n; } for(int i=1;i<=n+m;i++) { f[i]=a[i]; maxx=max(maxx,f[i]); } sort(e+1,e+cnt+1,cmp); ll aa,bb; for(int i=1;i<=cnt;i++) { aa=f[e[i].fr]; bb=f[e[i].to]; f[e[i].fr]=max(f[e[i].fr],f[e[i].to]+a[e[i].fr]); f[e[i].to]=max(f[e[i].to],f[e[i].fr]+a[e[i].to]); maxx=max(maxx,max(f[e[i].fr],f[e[i].to])); } printf("%lld\n",maxx); return 0; }
相关文章推荐
- 【USACO 2013 February Gold】旅行线路
- USACO2013 Nov. Gold T3,一道集合DP
- BSOJ 4881 守望者的挑战---概率DP(更应该是递推)
- bzoj3312[Usaco2013 Nov]No Change 状压DP
- bzoj3075 [Usaco2013]Necklace dp+kmp
- Cow Pedigrees_usaco 2.3.2_递推?dp?
- bzoj 3126: [Usaco2013 Open]Photo dp
- 3312: [Usaco2013 Nov]No Change 状压DP
- POJ - 3265/USACO - Jan07 Gold Problem Solving 动态规划(DP) | 对USACO官方题解0ms程序的解释
- BZOJ_3063_[Usaco2013]Route Designing_DP
- 【USACO 2013 February Gold】分割农场
- USACO 2011 Feb Gold 1.Cowlphabet(dp)
- BZOJ 2097 USACO 2010 Dec Gold Exercise 奶牛健美操 二分答案 树形DP 贪心
- bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
- bzoj3126[Usaco2013 Open]Photo 单调队列优化dp
- bzoj 3126: [Usaco2013 Open]Photo (DP+单调队列)
- 【bzoj3312】[Usaco2013 Nov]No Change 状态压缩dp+二分
- 【BZOJ】3315: [Usaco2013 Nov]Pogo-Cow(dp)
- BZOJ 3315: [Usaco2013 Nov]Pogo-Cow( dp )
- [bzoj3312][Usaco2013 Nov][DP]No Change不找零