UPC-购买巧克力(贪心)

简介: UPC-购买巧克力(贪心)

购买巧克力

时间限制: 1 Sec 内存限制: 128 MB

[提交] [状态]

题目描述

SHOI这次科技竞赛取得了好成绩,想庆祝一番,他手头总共有M元,购买巧克力来让同学分享快乐。他在SH商店逸择购买,在巧克力商品柜中共有N块巧克力,每块巧克力的价格是a[i]元.商家为了促销,提供给他K张优惠券,使用方法是:对于每块巧克力,如果使用一张优惠券,则可以以b[i]的优惠价格购买.注意每块巧克力只能使用一张优惠券,只能购买一次。

SHOI想知道自己最多可以购买多少块巧克力?

输入

第一行三个整数N,K,M(0≤K≤N≤100000,M≤1014)。接下来N行,每行两个整数,表示a[i]和bi。

输出

一个整数表示最多购买巧克力数。

样例输入 Copy

4 1 7

3 2

2 2

8 1

4 3

样例输出 Copy

3

提示

样例解释:选择第1、2、3块巧克力,其中第三块使用优惠券,总共5元。


对于20%的数据N≤10。

对于50%的数据:N≤100

对于100%的数据:N≤100000


又被贪心搞了,wa7次


思路:

很简单的思路,先把所有的优惠券都用完,要想要花钱最少并且数量最多的话,就按照b排序。

然后再从剩下的商品里看最多能买多少,这时候就需要按照a排序了。

要注意一个商品只能用一次,所以要再加个标记。

菜的真实

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
const int maxn=1e6+7;
ll n,k,m;
struct node{
    ll a,b;
    ll flag;///记录是否被用过
};
node a[maxn];
bool cmp1(node a,node b){
    return a.b<b.b;
}
bool cmp2(node a,node b){
    if(a.flag==b.flag) return a.a<b.a;
    return a.flag<b.flag;
}
int main(){
   n=read();k=read();m=read();
    for(int i=1;i<=n;i++){
        a[i].a=read();a[i].b=read();
    }
    sort(a+1,a+1+n,cmp1);
    int res=0;
    for(int i=1;i<=k;i++){
        if(a[i].b<=m){
            m-=a[i].b;
            a[i].flag=1;
            res++;
        }
    }
    if(m<=0){
        cout<<res<<endl;
        return 0;
    }
    sort(a+1,a+1+n,cmp2);
    for(int i=1;i<=n;i++)
        if(!a[i].flag){
            if(a[i].a<=m){
                m-=a[i].a;
                res++;
            }
            if(m<=0){
                cout<<res<<endl;
                return 0;
            }
        }
    cout<<res<<endl;
    return 0;
}
目录
相关文章
|
7月前
【每日一题Day273】LC860柠檬水找零 | 贪心
【每日一题Day273】LC860柠檬水找零 | 贪心
43 0
【每日一题Day273】LC860柠檬水找零 | 贪心
|
6月前
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
|
7月前
洛谷P1204 or SSL-1088 USACO 1.2 挤牛奶
洛谷P1204 or SSL-1088 USACO 1.2 挤牛奶
|
7月前
|
存储 算法 程序员
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
141 0
每日三题-乘积最大子数组、零钱兑换、戳气球
每日三题-乘积最大子数组、零钱兑换、戳气球
93 0
每日三题-乘积最大子数组、零钱兑换、戳气球
|
人工智能
UPC-放牛奶的冰箱(二分)
UPC-放牛奶的冰箱(二分)
114 0
UPC-放牛奶的冰箱(二分)
UPC-篮球运动(线性DP)
UPC-篮球运动(线性DP)
94 0
UPC-篮球运动(线性DP)
|
人工智能
UPC——放牛奶的冰箱(二分法)
题目描述 冬冬在古子城购买了一台冰箱,冰箱内部可以表示为高度为h,深度为1,宽度为2的矩阵,最初冰箱底部只有一个架子,但冬冬可以在任何一个格子顶部放隔板,隔板的宽为2,不占用任何空间,将冰箱内部分隔成上、下两部分。 冬冬有n瓶牛奶要按顺序放入冰箱里。第i瓶牛奶的高度是ai,深度和宽度均为1。如果架子上方的相应空间至少与瓶子一样高,他可以在一个架子上放一瓶牛奶,他不能将两瓶牛奶叠在一起(如果它们之间没有架子)。
156 0
UPC——放牛奶的冰箱(二分法)
绿纹龙的森林游记——UPC
题目描述 暑假来了,绿纹龙很高兴。于是飘飘乎就来到了森林一日游。 可是他却看到了很不和谐的一幕,一群猎人在森林里围捕小动物。 森林可以看做是一个10*10的方格,如下图所示,1表示猎人,0表示小动物。
127 0
绿纹龙的森林游记——UPC