• P8109 [Cnoi2021]幻想乡程序设计大赛 题解


    原题链接

    简要题意:

    给定两个有序数列 \(\{a_n\} \space \{b_n\}\). 对于所有排列 \(p_i\),求 \(\sum_{i = 1}^n \min(a_i , b_{p_i})\) 的最大值。

    另一种解释方式:给定两个有序数列 \(\{a_n\} \space \{b_n\}\). 求一种 \(a \rightarrow b\) 的映射,使得每组映射的最小值的和最大。求这个最大值。

    \(n \leq 10^5\).

    贪心经典题。

    我们可以想到一种显然的匹配方式:即 \(p_i = i\),保持原排序结果不变。那么这样是否最优呢?我们可以做一个简单的证明。

    只要从小数据出发。考虑对于 \(a_i < a_j\)\(b_i < b_j\),这四个数如何匹配?

    两种方式:\(\min(a_i , b_i) + \min(a_j , b_j)\),或者 \(\min(a_i , b_j) + \min(a_j , b_i)\). 记前者为 \(S\),后者为 \(T\).

    我们试图证明总有 \(S \geq T\).

    如果 \(a_i < a_j < b_i < b_j\),则 \(S = a_i + a_j , T = a_i + a_j\),有 \(S = T\).

    如果 \(a_i < b_i < a_j < b_j\),则 \(S = a_i + a_j , T = a_i + b_i\),有 \(S > T\).

    如果 \(b_i < a_i < a_j < b_j\),则 \(S = b_i + a_j , T = b_i + a_i\),有 \(S > T\).

    如果 \(a_i < b_i < b_j < a_j\),则 \(S = a_i + b_j , T = a_i + b_i\),有 \(S > T\).

    如果 \(b_i < a_i < b_j < a_j\),则 \(S = b_i + b_j , T = b_i + a_i\),有 \(S > T\).

    如果 \(b_i < b_j < a_i < a_j\),则 \(S = b_i + b_j , T = b_i + b_j\),有 \(S = T\).

    当然如果存在等号,那么和小于号可以一样得出结论。

    最后我们就得到了 \(S \geq T\). 那么也就是说:

    对于任意的 \(i < j\),必有 \((a_i , b_i)(a_j , b_j)\) 的匹配方式比 \((a_i , b_j)(a_j , b_i)\) 不劣。

    所以我们只需要把 \(a,b\) 从小到大排序,然后让 \(p_i = i\),扫一遍即可。

    而注意到原题已经帮我们排好序了(其实这也是一点有力的暗示),那么我们直接扫一遍就行了。

    时间复杂度:\(\mathcal{O}(n + m)\).

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1e5 + 1;
    
    int Ans = 0, a[N];
    
    int main() {
    	int n; scanf("%d",&n);
    	for(int i = 1; i <= n; i++) scanf("%d",a + i);
    	for(int i = 1; i <= n; i++) {
    		int x; scanf("%d",&x);
    		Ans += min(x , a[i]);
    	}
    	printf("%d\n",Ans);
    }
    
  • 相关阅读:
    Prometheus之Dockerfile编写、镜像构建、容器启动
    十五、数据库高并发处理方式
    十四、.NET CORE3.1 使用EFCORE(Microsoft.EntityFrameworkCore) 创建数据表
    云筹优化APS发布超强的可视化排产甘特图【+视频演示】
    如何解决xrdp远程连接UOS后黑屏的问题
    在linux下获取硬盘序列号
    linux下休眠/待机命令
    inotifywait的安装及基本使用
    Shell 脚本获取当前目录下全部文件夹名
    【转】第 4 章 Netperf 网络测试
  • 原文地址:https://www.cnblogs.com/bifanwen/p/15889401.html
Copyright © 2020-2023  润新知