啊。这道题其实排序就可以解决了。把商品的差值由小到大排序,前k个是必须买折扣期间的。后n-k个,那个价格更低就买哪个。
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=2e5+10;
int a[maxn];
int main()
{
int n,k;
while(~scanf("%d %d",&n,&k)){
int ans=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
ans+=a[i];//全部暴力购买
}
int x;
for(int i=0;i<n;i++){
scanf("%d",&x);
a[i]=a[i]-x;//计算差值
}
sort(a,a+n);
for(int i=k;i<n;i++){//前k个不需要考虑,必须买
if(a[i]>0)ans-=a[i];//后面能赚到就买
}
printf("%d\n",ans);
}
return 0;
}