0
点赞
收藏
分享

微信扫一扫

【YBTOJ进阶训练指导】最大积分【贪心】

在这里插入图片描述

显然,积分大的往后排

c o d e code code

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

long long n, m, t[101000];
struct node
{
	long long k, c;
}a[101010];

bool cmp(node x, node y)
{
	return x.c<y.c;
}

int main()
{
	scanf("%lld", &n);
	for(long long i=1; i<=n; i++)
		scanf("%lld%lld", &a[i].k, &a[i].c);
	scanf("%lld", &m);
	for(long long i=1; i<=m; i++)
		scanf("%lld", &t[i]);
	for(long long i=m; i>=1; i--)
		t[i]=t[i]-t[i-1];
	t[m+1]=1e18;
	sort(a+1, a+1+n, cmp);
	long long ans=0;
	for(long long i=1, j=1; i<=n; i++)
	{
		while(a[i].k>t[j])
		{
			ans+=t[j]*a[i].c*j;
			a[i].k-=t[j];
			j++; 
		}
		ans+=a[i].c*a[i].k*j;
		t[j]-=a[i].k;
	}
	printf("%lld", ans);
	return 0;
}
举报

相关推荐

0 条评论