P10771 [NOISG2021 qualification] Competition
liaoxingrui
·
·
题解
Content
给你一个 n、n 个物理成绩 A_i 和 n 个生物成绩 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;
}
```