P10771 [NOISG2021 qualification] Competition

· · 题解

Content

给你一个 nn 个物理成绩 A_in 个生物成绩 B_i。从中取出 a 个物理成绩和 b 个生物成绩(不能取同一个位置上的),求总和最大。

## Solution 我们可以知道 $a + b = n$,也就是每个位置的成绩都要选一个。 我们可以通过贪心来做,如果 $A_i - B_i$ 越大,那么就选他的物理成绩,如果 $A_i - B_i$ 越小,那么就选他的生物成绩,因为都要选,就不用在考虑空的位置了。 ## Code ```cpp #include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,x,y,z,cnt,ans; struct node{ int x,y,z; }a[N]; inline bool cmp(node x,node y){ return x.z<y.z; } int main(){ cin>>n>>x>>y; for(int i=1;i<=n;i++) cin>>a[i].x; for(int i=1;i<=n;i++){ cin>>a[i].y; a[i].z=a[i].x-a[i].y; } sort(a+1,a+n+1,cmp); for(int i=1;i<=y;i++) ans+=a[i].y; for(int i=y+1;i<=n;i++) ans+=a[i].x; cout<<ans; return 0; } ```