【贪心】纪念品分组

这道是NOIP普及组2007年的一道水题,不过我还是被卡了一小时左右(果然还是自己太鶸的原因吗?)

这道题的遵循规则是  一个大价值的跟上一个小价值的一堆,如果不行就大价值单独为一堆。直到9个物品都被发放完毕为止

附上自己的代码z

#include <iostream>
#include <queue>
using namespace std;
priority_queue<int>a;  //这道题我用的优先队列 这个是从大到小排
priority_queue< int,vector<int>,greater<int> >b;//这个是从小到大排
int w,n,s,tot=0,jishu=0;
int main(){
    cin>>w>>n;
    for(int i=1;i<=n;i++){
        cin>>s;
        a.push(s); //输入数量并送入队列进行排序
        b.push(s);
    }
    for(int i=1;i<=n;){ //这个是边界条件  
        if( a.top()+b.top() > w){    //如果当前最大的加上最小的超过限定的话 就送走最大的 自己思考一下为什么
            a.pop();
            ++tot; //送走了一堆
            ++i;  //送走了一个物品
        }
        else {
            a.pop();
            b.pop();
            ++tot; //送走了一堆
            i=i+2;  //送走了两个物品
        }
    }
    cout<<tot<<endl; 
    return 0; 
} 
纪念品分组

 

转载于:https://www.cnblogs.com/OIerLYF/p/6058600.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值