codeforces 810B

题意:有n天,每天有ki 件商品,每天能卖出li件商品,当天剩下的不会留到明天,你可以选中f天,被选中的那一天ki可以乘以2,问n天最多能卖出多少件商品。

题解:贪心。先算出不选的时候(没有乘以2)的总数,
然后将ki*2之后多出的放在一个数组中,排序,输出前f个。然后在把之前的和加上。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+10;
bool cmp(int a,int b)
{
    return a>b;
}
struct Node{
    int k;
    int l;
}node[N];
int x[N];
int main()
{
    cin.sync_with_stdio(false);
    int n,f;
    while(cin>>n>>f){
        ll sum=0;
        int k,l;
        memset(x,0,sizeof(x));
        for(int i=0;i<n;i++){
            cin>>node[i].k>>node[i].l;
            sum+=min(node[i].k,node[i].l);//原来的
        }
        for(int i=0;i<n;i++)
        {
            if(node[i].k<node[i].l)
            {
                if(node[i].k*2>node[i].l)
                    x[i]=node[i].l -node[i].k;
                else
                    x[i]=node[i].k;//多着的
            }
        }
        sort(x,x+n,cmp);
        for(int i=0;i<f;i++)
            sum+=x[i];//原来的加上多着的
        cout<<sum<<endl;
    }
    return 0;
}

发布了35 篇原创文章 · 获赞 0 · 访问量 705

猜你喜欢

转载自blog.csdn.net/fendouzhilu666/article/details/103356445