Codeforces 810B Summer sell-off 题解

来源:互联网 发布:js调用电脑摄像头拍照 编辑:程序博客网 时间:2024/06/06 03:18

题意

给定一个商店每天的存货量和顾客的购买量,现在可以选择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;}