#include <iostream>
#include <algorithm>
#include <math.h>
#include <queue>
using namespace std;
typedef long long ll;
struct node
{
ll a,b,c;
ll mark; //标记x每次加一函数的增长f(x+1)-f(x);
ll x;
bool operator<(const node &t) const{
return mark > t.mark;
}
};
int main()
{
ll n,m;
while(~scanf("%lld%lld",&n,&m))
{
priority_queue<node> pq;//自定义的优先队列;
ll ans=0;
for(int i=0;i<n;i++){
node t;
scanf("%lld%lld%lld",&t.a,&t.b,&t.c);
ans+=t.a+t.b+t.c; //当x等于一时;
t.x=1;
t.mark=t.a*(2*t.x+1)+t.b; //f(x+1)-f(x),增长量;
pq.push(t); //压入;
}
for(int i=0;i<m-n;i++){
node temp=pq.top();
//每次取增长1最少的函数,得x的值,然后再 temp.x++;
pq.pop();
temp.x++;
temp.mark=temp.a*(2*temp.x+1)+temp.b;//增长f(x+1)-f(x);
pq.push(temp);
ans+=temp.a*(2*temp.x-1)+temp.b;
//ans是f(x-1)的值,所以减去增长的量;
}
printf("%lld\n",ans);
}
return 0;
}
D - Function(HDU - 6546)女生赛
猜你喜欢
转载自blog.csdn.net/weixin_52879528/article/details/121010600
今日推荐
周排行