P8109 [Cnoi2021]幻想乡程序设计大赛 题解
P8109 [Cnoi2021]幻想乡程序设计大赛 题解
upd at
upd at
upd at
思路:
既然这道题由红改黄了(虽然现在改回橙了又改回黄了),那大家就能看出这一道题实际上考的是一一对应直接得到答案就正确的证明过程。
这道题,我们使用贪心算法。尽量给 AC 队伍多的题目选多的气球,就可以尽量多的配对气球,也就是需要一一对应。证明如下:
证明:
这道题可以转化成要证明“最后分配方案存在
假设现在有配对好的两队和两组气球,分别为
假设让它们逆序匹配的方法(
综上所述,在所有存在的情况中,逆序答案永远不比顺序答案更优,那么我们就可以一直用顺序答案,既然在每两对中都是按顺序答案更优,那么我们就按从小到大(从大到小也一样)的顺序来配对气球就可以了。
代码实现:
所以在排序好的两个数组中,直接一一对应进行比较就行了。这个必然是最优方案。对于第
#include<bits\stdc++.h>
using namespace std;
int n,a[100005],b[100005];//如题的变量
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<ᥒ;i++){
cin>>b[i];
}//输入部分
//题目保证数据单调不降,不用排序
int s=0;//存储答案
for(int i=0;i<n;i++){//直接顺序比较,所有5种情况都是顺序更优
s+=min(a[i],b[i]);//选更小的那个
}//计算
cout<<s;//输出
return 0;//不要忘了
}
望管理能过这篇题解。