题意
给定一个商店每天的存货量和顾客的购买量,现在可以选择f天进行抛售,抛售日存货量翻倍,问这个商店在这些天里最多能卖出多少货
思路
首先考虑不进行抛售时能卖出多少,就是存货量和购买量中的较小值,如果抛售就会增加存货量*2和购买量的最小值减之前那个值的销售数量,那么我们统计出如果进行抛售,每天的销售数量增量,取最大的f天,再加上每一天不抛售的销售量就是答案
代码
#include <cstdio>
#include <algorithm>
using namespace std;
long long k[100001],l[100001];
long long add[100001];
int main()
{
long long n,f,ans;
scanf("%I64d%I64d",&n,&f);
for(long long i=0;i<n;i++)
{
scanf("%I64d%I64d",&k[i],&l[i]);
add[i]=min(2*k[i],l[i])-min(k[i],l[i]);
}
sort(add,add+n);
reverse(add,add+n);
ans=0;
for(long long i=0;i<n;i++)
ans+=min(k[i],l[i]);
for(long long i=0;i<f;i++)
ans+=add[i];
printf("%I64d\n",ans);
return 0;
}