题解 | #发工资#

发工资

http://www.nowcoder.com/questionTerminal/e47cffeef25d43e3b16c11c9b28ac7e8

贪心法,确保每次选的钱浪费最少即越接近m越好,其实就是在不能凑齐m的时候优先用小额的钱去补就可以了。
#include<cstdio>
#include<iostream>
#include<cstring> 
#include<algorithm>
#include<queue>
using namespace std;
const int N=100010;
struct Money{
    int x, y;
    bool operator < (const Money e) const{
        return x<e.x;
    }
} money[N];
int main() {
    ios::sync_with_stdio(false);
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;++i)
        cin>>money[i].x>>money[i].y;
    sort(money,money+n);
    int ans=0;
    while(1){
        int need,rest=m;
        for(int i=n-1;i>=0;--i){
            if(money[i].y==0) continue;
            need=rest/money[i].x;
            if(need>money[i].y) need=money[i].y;
            money[i].y-=need;
            rest-=need*money[i].x;
            if(rest==0) break;
        }
                //不能凑齐m,优先用小额的钱去补
        if(rest!=0){
            for(int i=0;i<n;++i){
                if(money[i].y==0) continue;
                need=rest/money[i].x+1;
                if(need>money[i].y) need=money[i].y;
                money[i].y-=need;
                rest-=need*money[i].x;
                if(rest<=0) break;
            }
        }
        if(rest>0) break;
        ans++;
    }
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:35
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务