原题

韦神提供的思路orz

首先一个显然的性质,所有的c可以提出来,方程变成ax^2+bx的形式

因为x的值是离散的,而m的值又不大

所以一开始让x都为1(注意!x是正整数),然后每次挑一个x让他加一

这样做怎么保证正确?

注意二次函数的性质,由于a>=1,当x递增时斜率,函数值的变化量是递增的

可以贪一个

每次去变化率最小的那个方程,让它的x加一

现在不取,后边也不会更优,所以正确

变化率相同时并不需要比较函数形状

因为由变化率递增的性质,就算取了较坏的函数,下一步还是取较好函数的相同变化量,然后再下一步必定会取到较好函数

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define LL long long
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct nds{LL x; int y;}hp[]; int sz=;
int n,m;
LL a[],b[],c[];
int d[];
LL cclt(LL x,int y){
return x*x*a[y]+x*b[y];
}
void ist(nds x){
hp[++sz]=x;
for(int i=sz;i> && hp[i].x<hp[i>>].x;i>>=) swap(hp[i],hp[i>>]);
}
void pp(){
swap(hp[],hp[sz--]);
for(int i=;;){
int mn=hp[i].x,mnid=i;
if((i<<)<=sz && hp[i<<].x<mn) mn=hp[i<<].x,mnid=(i<<);
if((i<<|)<=sz && hp[i<<|].x<mn) mn=hp[i<<|].x,mnid=(i<<|);
if(i==mnid) break;
swap(hp[i],hp[mnid]);
i=mnid;
}
}
void prvs(){
sz=;
}
int main(){
//freopen("ddd.in","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF){
prvs();
for(int i=;i<=n;++i) a[i]=rd(),b[i]=rd(),c[i]=rd();
LL bwl=;
for(int i=;i<=n;++i){
d[i]=;
ist((nds){cclt(d[i]+,i)-cclt(d[i],i),i});
bwl+=cclt(d[i],i)+c[i];
}
for(int i=n+;i<=m;++i){
LL mn=hp[].x; int mnid=hp[].y;
++d[mnid];
pp();
ist((nds){cclt(d[mnid]+,mnid)-cclt(d[mnid],mnid),mnid});
bwl+=mn;
}
printf("%lld\n",bwl);
}
return ;
}

最新文章

  1. IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈
  2. npm 安装不了模块
  3. ACM之路(20)—— Splay初探
  4. [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength
  5. Linux Shell 脚本入门
  6. UESTC 883 方老师与两个串 --二分搜索+DP
  7. 2016&quot;百度之星&quot; - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP
  8. 【风马一族_git_github】git与github的英文记录
  9. Android中Bitmap和Drawable,等相关内容
  10. centos nginx install openssl
  11. 查找mysql数据文件存放路径
  12. 用C#中的params关键字实现方法形参个数可变
  13. JSON 数字排序 多字段排序
  14. 谈一谈struts2和springmvc的拦截器
  15. iOS开发技术分享(1)— iOS本地数据存储
  16. IE6下绝对定位元素和浮动元素并列绝对定位元素消失
  17. NS3网络仿真(10): 解析以太网帧
  18. Eclipse安装Jetty插件
  19. Eureka介绍
  20. linux查看进程已经运行了多长时间

热门文章

  1. python 安装第三方模块的各种方法
  2. python 配合 es 查询数据
  3. 23.安装php和echarts进行结合展示图表
  4. ######&lt;待随时补充&gt;我的学习规划######
  5. 怎样理解Node对象接口
  6. 05docker仓库---搭建本地仓库
  7. ArrayList,LinkedList,Vector区别.TreeSet,TreeSet,LinkedHashSet区别
  8. .Net Core 3.0 内置依赖注入:举例
  9. GridView直接打印
  10. C#键盘事件