CSUST OJ 1008 吃零食

编程入门 行业动态 更新时间:2024-10-04 15:25:04

CSUST OJ 1008 <a href=https://www.elefans.com/category/jswz/34/1768650.html style=吃零食"/>

CSUST OJ 1008 吃零食

吃零食

题意:桌上有n袋零食,不同的零食会有不同的美味程度wi和腐坏程度di,每种零食在一单位时间内美味程度都会下降di,但是不会降到0以下。
qwb每一单位时间可以吃掉一袋零食。现在qwb想要在吃完所有零食后获得的美味度最大。问最大值是多少?

输入范围:
第一行,一个整数n,代表有n袋零食接下来n行,每行2个整数wi和di(1<=n<=100,000),(0<=wi<=1,000,000,000),(0<=di<=10,000)

输入样例:

4
5 3
4 3
5 4
7 5

输出描述:

9

思 路:这题一看就知道是贪心,选择贪心策略,按di从大到小排序,如果di一样大,则w从大到小排序。

收 获:排序型的贪心。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+5;
struct node{int w,d,t;bool operator < (const node &p)const{if(d<p.d) return true;else if(d == p.d && w<p.w) return true;else return false;}
}a[maxn];
priority_queue<node> que;
int n;
int main(){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d %d",&a[i].w,&a[i].d);a[i].t = 0;que.push(a[i]);}ll sum = 0 ;int nowtime = 0;while(que.size()){node  p = que.top();que.pop();int num = p.w - (nowtime - p.t)*p.d;if(num <= 0){continue;}if(num < p.d){p.d = p.w = num;p.t = nowtime;que.push(p);continue;}sum+=num;nowtime++;}printf("%lld\n",sum);return 0;
}

更多推荐

CSUST OJ 1008 吃零食

本文发布于:2024-02-28 06:53:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768308.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:吃零食   CSUST   OJ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!