吃零食

桌上有n袋零食,不同的零食会有不同的美味程度wi和腐坏程度di,每种零食在一单位时间内美味程度都会下降di,但是不会降到0以下。

qwb每一单位时间可以吃掉一袋零食。现在qwb想要在吃完所有零食后获得的美味度最大。问最大值是多少?

Input

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

Output

输出一行,最大的美味度。

4
5 3
4 3
5 4
7 5

9

这个题目是一个贪心,但是还是感觉有点难的,这个题目要对腐烂速度进行贪心,因为腐烂速度代表美味值的损失,

所以我们要尽量选美味值损失少的,但是如果一个零食的美味值已经小于它的腐烂速度了,这个时候就要改变它的腐烂速度。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + ;
struct node
{
ll w, d, t;
node(ll w=,ll d=,ll t=):w(w),d(d),t(t){}
bool operator<(const node &a)const
{
if (a.d == d) return a.w > w;
return a.d > d;
}
}; int main() {
int n;
scanf("%d", &n);
priority_queue<node>que;
for (int i = ; i <= n; i++)
{
ll w, d;
scanf("%lld%lld", &w, &d);
que.push(node(w, d, ));
}
ll day = , ans = ;
while(!que.empty())
{
node e = que.top(); que.pop();
ll num = e.w - (day - e.t)*e.d;
if (num <= ) continue;
if (num < e.d) {
ll w = num, d = num, t = day;
que.push(node(w, d, t));
continue;
}
ans += num;
day++;
}
printf("%lld\n", ans);
return ;
}

贪心


最新文章

  1. MySQL基础笔记
  2. android:configChanges=&quot;keyboard|keyboardHidden|orientation|screenSize&quot;
  3. C# 删除字符串中的中文
  4. [第一个自己做的C小程序]丧失求生文字小游戏
  5. (转)深入理解Java中的final关键字
  6. QTP
  7. js:语言精髓笔记1--标识符与基本类型
  8. Java fundamentals of basic IO
  9. Vue.js 学习示例
  10. 《我是一只IT小小鸟》 读后感
  11. IT生涯, 我的常用软件清单
  12. K3数据字典备查
  13. PyGame实现情人节表白利器
  14. kubernetes 安装kong、kong-ingress-controlor
  15. vim8.0模式详解
  16. MYSQL处理高并发,防止库存超卖(图解)
  17. 原生YII2 增删改查的一些操作(非ActiveRecord)
  18. DBGrid相关技术整理
  19. Android Studio 入门级教程
  20. 《阿里巴巴Java开发手册》阅读笔记

热门文章

  1. 如何可视化深度学习网络中Attention层
  2. python里的内置函数你知道有多少个吗?
  3. Java工作流引擎-集团模式下的权限 设计与实现
  4. 浏览器插件之王-Tampermonkey(油猴脚本)
  5. ubuntu16.04-交叉编译opencv3.4.6
  6. 开发者福利!百问I.MX6ULL裸机文档发布
  7. 一张图记住Linux系统常用诊断工具
  8. tp3.2 事务 和 tp5.0事务
  9. GOLANG 匿名函数笔记
  10. java list随机截取(洗牌)