cogs2550. 冰桥,升起来了!

cogs2550. 冰桥,升起来了!

大家好,又见面了,我是全栈君。

【问题背景】

11月16日:

今天要来到南极洲的一角来考察啦!南极的空气真的很好呢,只不过有点冷,雪什么的真是太可爱了!
这次我要在一个冰谷(应该说是山谷的地方)考察,考察点在这山谷的两边(希望不要掉下去!),可是我只能坐着直升机到达这些考察点中的一个(因为空中的气流少有平稳的时候),剩下的地方只能靠腿走过去了。不过我可以预定直升机在气流合适的时候到某个考察点来接我,真是方便呀!
哦!不过我还有很多设备。。。我可搬不动,不过放在滑溜溜的冰面上拉着还是可以的,我有一个吸热扩散器,可以在一些地形合适的地方建一座冰桥!看来我只能沿着冰桥走了。

QAQ我刚看了地图,似乎冰桥只能建立在跨越山谷的两个考察点间,而且不能交叉,而且最可恶的是,这些冰桥我只能走一次。。。。因为他们太脆弱了。。真糟糕,看来这次可能不能把全部的考察点都考察了。。不过我要让这次考察最有价值!
那就从分析考察点的价值开始吧,然后要好好想想怎么安排这次考察的顺序。

——美

【问题描述】

山谷两侧分别有一些考察点,每个考察点都有其价值,其中一些考察点间可以建立跨越山谷的冰桥,让小美能够从一个考察点到另一个考察点。
但是冰桥有它的缺点,它十分的脆弱,以至于只能走一次,而且不能交叉(假设两座冰桥分别连接了 a1 和 b1, a2 和 b2 ,当 a1 < a2 且 b1 > b2时两桥交叉)。
由于小美带着很多沉重的设备,所以她必须沿着冰桥走,请设计策略使得小美这次的考察的价值和最大。

【输入格式】

输入共 A+B+K+1 行。

第 1 行包含 3 个由空格隔开的非负的整数 A, B, K,表示山谷 A, B 两侧各有 A, B 个考察点,其中可以建立 K 座冰桥。
第 1 +(1) 至 1 +(A) 行,每行包含 1 个正整数,其中第 1 +(i) 行的正整数 p 表示 A 侧第 i 个考察点的价值为 p。
第 1+A +(1) 至 1+A +(B) 行,每行包含 1 个正整数,其中第 1+A +(i) 行的正整数 p 表示 B 侧第 i 个考察点的价值为 p。
第 1+A+B +(1) 至 1+A+B +(K) 行,每行包含 2 个正整数 u, v,表示 A 侧的第 u 个考察点与 B 侧的第 v 个考察点间可以建立冰桥。

【输出格式】

输出共 1 行。

第 1 行包含 1 个正整数,表示此次考察的最大价值和。

【样例输入】

3 2 4
2
2
3
1
2
3 2
2 1
1 2
3 1

【样例输出】

8

【数据规模与约定】

对于测试点 1 到 2,A <= 5; B <= 5
对于测试点 3,A <= 200; B <= 200; K <= 15,000
对于测试点 4 到 10,A <= 40,000; B <= 40,000; K <= 100,000

对于全部数据,保证 p <= 40,000; 保证冰桥没有重复

 

官方题解:

定义状态 FA[i], FB[i] 分别表示到达 A, B 侧的第 i 个点所能得到的最大价值和。
首先我们可以得知,冰桥不交叉的充分必要条件是同一侧被访问的点的编号递增。

对所有的边进行从小到大排序,按照排序后边的顺序进行转移。
排序后可以保证,对于每个点 u,其出边到达的点的编号在排序后是递增的,所以对于连接 a 和 b 的边,此时的 FA[a] 只会从小于 b 的点中转移而来,FB[b] 也只会从比 a 小的点转移过来,所以这时的 FA[a] 尝试从 FB[b] 转移是绝对合法的, FA[a] = max(FA[a], FB[b] + VA[a]) (保留先前最大值 或者 从B侧b点走到A侧a点)

 

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 101000
using namespace std;
struct edge{
    int from,to;
    void read(){
        scanf("%d%d",&from,&to);
    }
}a[MAXN];
int dp1[MAXN],dp2[MAXN],v1[MAXN],v2[MAXN];
int A,B,K;

bool cmp(edge x,edge y){
    if(x.from==y.from) return x.to<y.to;
    return x.from<y.from;
}

int main()
{
    scanf("%d%d%d",&A,&B,&K);
    for(int i=1;i<=A;i++) scanf("%d",&v1[i]);
    for(int i=1;i<=B;i++) scanf("%d",&v2[i]);
    for(int i=1;i<=K;i++) a[i].read();
    sort(a+1,a+K+1,cmp);
    for(int i=1;i<=A;i++) dp1[i]=v1[i];
    for(int i=1;i<=B;i++) dp2[i]=v2[i];
    for(int i=1;i<=K;i++){
        int from=a[i].from,to=a[i].to,d1=dp1[from],d2=dp2[to];
        dp1[from]=max(dp1[from],d2+v1[from]);
        dp2[to]=max(dp2[to],d1+v2[to]);
    }
    int ans=0;
    for(int i=1;i<=A;i++) ans=max(ans,dp1[i]);
    for(int i=1;i<=B;i++) ans=max(ans,dp2[i]);
    printf("%d",ans);
    return 0;
}

 

转载于:https://www.cnblogs.com/renjianshige/p/7653087.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108113.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入浅出JVM调优,看完你就懂

    深入浅出JVM调优,看完你就懂深入浅出JVM调优基本概念:JVM把内存区分为堆区(heap)、栈区(stack)和方法区(method)。由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的。其他的都无需GC。下图文JVM的内存模型从图中我们可以看到,1、JVM实质上分为三大块,年轻代(YoungGen),年老代(OldMemory…

    2022年6月1日
    35
  • Latex中插图总结(一)

    Latex中插图总结(一)写在前面的话CSDN中的数据库保存是不是有问题,我之前写了很多的,存在草稿箱里的最后竟然没有在了。真是郁闷死个人。亏我写了这么多,以后写完要保存了。泪目。Latex的插图在Latex中使用插图一般有两种方式,一种是插入事先准备好的图片,另一种是使用Latex代码直接在文档中画图。我们一般常见的使用都是第一种,准备好图片,然后直接插入在我们文档当中。只有一些特殊情况需要用大量代码作图。插图功能不是有L

    2022年6月10日
    44
  • 智能优化算法:灰狼优化算法-附代码

    智能优化算法:灰狼优化算法-附代码智能算法:灰狼优化算法-附代码摘要:受灰狼群体捕食行为的启发,Mirjalili等[1]于2014年提出了一种新型群体智能优化算法:灰狼优化算法。GWO通过模拟灰狼群体捕食行为,基于狼群群体协作的机制来达到优化的目的。GWO算法具有结构简单、需要调节的参数少,容易实现等特点,其中存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。1.算法原理灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物

    2022年5月24日
    30
  • springboot+redis+jedis实现分布式锁小Demo

    springboot+redis+jedis实现分布式锁小Demo

    2021年7月12日
    90
  • UVA 11464 Even Parity(递归枚举)

    UVA 11464 Even Parity(递归枚举)

    2022年1月10日
    47
  • DHCP原理及DHCP服务器的防攻击手段「建议收藏」

    DHCP原理及DHCP服务器的防攻击手段「建议收藏」一、DHCP简介1、产生背景:网络增大,手工配置存在很多问题【人员素质要求高、容易出错、灵活性差、IP地址资源利用率低、工作量大,不利于管理等】2、DHCP相对于静态手工配置的优点【效率高、灵活性强、易于管理等】二、DHCP的原理与配置(一)、DHCP的基本工作过程【发现阶段、提供阶段、请求阶段、确认阶段】如下图:【发现阶段】:在发现阶段,DHCP客户端会以广播的方式给自己所在在广播域…

    2022年6月17日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号