P8109 [Cnoi2021]幻想乡程序设计大赛 题解
没有题解来凑热闹。
考虑每个颜色的气球给哪一个组。
题面里说了序列不降,我们要利用这个条件。
按气球数从大到小考虑。
假如这个颜色气球的数量多于任意一个组的人数,要最多只能给人数最多的组。
假如给了较少的组,那么下一个颜色数量比他小,无论给哪个都不会更优。
否则呢?随便选一个大于他的就能用上全部气球,因为下一个颜色的气球数量更少,所以现在随便即可。
既然随便,那为何不选最多的?
总结一下,按气球数从大到小,每次选一个最大的组。
等于组也从大到小。
也就是按照排名一一匹配。
#include<bits/stdc++.h>
using namespace std;
int n,a[100008],b[100008],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
for(int i=1;i<=n;i++)
{
ans+=min(a[i],b[i]);
}
cout<<ans<<endl;
return 0;
}