ybtoj 贪心 A. 2.最大积分

Posted SSL_ZZL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ybtoj 贪心 A. 2.最大积分相关的知识,希望对你有一定的参考价值。

A. 2.最大积分

ybtoj 贪心 A. 2.最大积分


题面



解题思路

等级越高,乘的积分就会越高,那么肯定是价值高的物品,在后面买(等级更高时)是更优的

按价值从小到大排序,贪心买下去

注:题目讲的不太清楚,不是当等级是i的时候买 ti 个东西,而是一共买了 ti 个东西就能升级😅 所以才说 t 是递增的


Code

#include <bits/stdc++.h>
#define ll long long

using namespace std;

struct DT
	ll num, vis;
a[200];
ll n, m, ans, lev;
ll w[200];

bool cmp(const DT&k, const DT&l) 
	return k.vis < l.vis;


int main() 
	scanf("%lld", &n);
	for(int i = 1; i <= n; i ++) scanf("%lld %lld", &a[i].num, &a[i].vis);
	sort(a + 1, a + 1 + n, cmp);
	
	scanf("%lld", &m);
	for(int i = 1; i <= m; i ++) scanf("%lld", &w[i]);
	for(int i = m; i; i --) w[i] -= w[i - 1];  
	w[m + 1] = 1e15;  //建墙
	
	lev = 1;  //初始等级为1
	for(int i = 1; i <= n; i ++) 
		while(a[i].num > w[lev])   //可以升级
			ans += w[lev] * lev * a[i].vis;
			a[i].num -= w[lev];
			lev ++;
		
		ans += a[i].num * lev * a[i].vis;
		w[lev] -= a[i].num;
	
	printf("%lld", ans);

```

以上是关于ybtoj 贪心 A. 2.最大积分的主要内容,如果未能解决你的问题,请参考以下文章

ybtoj 深搜进阶A. 2.最大费用

ybtoj 二分进阶A. 1.喂养宠物

ybtoj 贪心C. 4.出栈序列

ybtoj 宽搜进阶二分A. 1.最小权值

ybtoj 宽搜进阶二分A. 1.最小权值

ybtoj 11.13 S组暴力A. 他的世界