ybtoj 贪心 A. 2.最大积分
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ybtoj 贪心 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.最大积分的主要内容,如果未能解决你的问题,请参考以下文章