//后缀和+贪心
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int N=1e5+5;
struct lk{
int p,c;
}a[N];
int q[N];//后缀和数组
int n,s,k;
int ans;
bool cmp(lk x,lk y)
{
return x.c<y.c;
}
signed main()
{
cin>>n>>s;
for(int i=1;i<=n;i++)
cin>>a[i].p>>a[i].c;
sort(a+1,a+n+1,cmp);//按训练次数从小到大排序
for(int i=n;i>=1;i--)
{
q[i]=q[i+1]+a[i].p;
}
for(int i=1;i<=n;i++)
{
if(k==a[i].c) //k表示已经团练了多少次刚开始初始化0
continue;
if(s<q[i])//判断是否要团练
{
ans+=(a[i].c-k)*s;
k=a[i].c;
}
else
ans+=(a[i].c-k)*a[i].p;
}
cout<<ans;
return 0;
}
训练士兵(第十五届蓝桥杯c++A组)
该篇文章介绍了如何使用C++编程语言实现一个涉及后缀和数组和贪心策略的问题,解决如何在给定训练次数限制下最大化收益的团练问题。
摘要由CSDN通过智能技术生成