题意:
有n个萝卜 ,每根萝卜长度不一样,现在将这些萝卜分为k段 这k根萝卜每根萝卜的花费是长度的平方,求最小的花费。
思路:
原本想的是放进将萝卜放进大根堆,然后取最大的对半分,其实这样是不正确的,hack数据:3 5
10 3 1
如果按照对半分的思路来 就是分为 2 3 5 3 1 ,然而最优解是 3 3 4 3 1,那就是不正确的,那么我们换一种思路,如果知道每一根萝卜分为z段 ,那么每根萝卜的最优解就是均分,那么有个大胆的想法就是将每个萝卜的当前最小花费和多分一段的最小花费的差值放进大根堆里面,然后执行k-n次,每次就减去最大值,不得不说太优秀了这个想法。
ac代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{ll a;ll b;ll c;bool operator <(const node&W)const{return a<W.a;}
};
priority_queue<node>q;
ll get(ll x,int k)
{ll aver=x/k;ll time=x%k;return time*(aver+1)*(aver+1) + aver*aver*(k-time);
}
int main()
{ll n,k;cin>>n>>k;ll res=0;for(int i=0;i<n;i++){ll x;cin>>x;res+=1ll*x*x;q.push({get(x,1)-get(x,2),x,2});//cout<<get(x,1)-get(x,2)<<endl;} int ct=k-n;
//   cout<<ct<<endl;for(int i=0;i<ct;i++){auto t=q.top();q.pop();ll a=t.a;ll b=t.b;ll c=t.c;//cout<<a<<' '<<b<<' '<<c<<endl;res-=a;q.push({-get(b,c+1)+get(b,c),b,c+1});}cout<<res<<endl;return 0;
}

E. Carrots for Rabbits(贪心)相关推荐

  1. Codeforces 1428E Carrots for Rabbits 贪心

    文章目录 题意 题解 题目链接 我又掉了. CF上少见的优秀贪心题,有必要拿出来讲一下. 题意 n个数切成k份,求切出数的平方和的最小值. 题解 首先证明当对一个数字切的份数越多,因切分而减少的平方和 ...

  2. CF1428 E. Carrots for Rabbits 贪心+优先队列

    n个数切成k份,求切出数的平方和的最小值. 有个比较显然的结论: 对于一个数x,把它分成y份,求平方和sm,使得sm最小的分法一定是均分. 而把一个数分成y份,平方和与分成y-1份的平方和减量设为Cy ...

  3. (贪心)CF1428E. Carrots for Rabbits

    CF1428E. Carrots for Rabbits 题意: 给你nnn个正整数,分成kkk个正整数,要求分好之后∑i=1kai2\sum\limits_{i=1}^{k}{a_i}^{2}i=1 ...

  4. 【做题记录】CF1428E Carrots for Rabbits—堆的妙用

    CF1428E Carrots for Rabbits 题意: 有 \(n\) 个萝卜,每个萝卜的初始大小为 \(a_i\) .现在要把这些萝卜切为为 \(k\) 个.吃每一个萝卜的时间为这个萝卜的大 ...

  5. codeforces 1428E. Carrots for Rabbits(贪心(非常优秀的贪心题),结构体重载运算符)

    题目链接:https://codeforces.ml/contest/1428/problem/E 题意:给定n个数,要求将这些数拆分为k个数,是这些数的平方和最小. 题解:结构体,一开始想到的是每次 ...

  6. Codeforces1428 E. Carrots for Rabbits(贪心+堆)

    题意: 解法: 要让一个数切割之后权值最小,那么一定是均等切割.先计算出总权值, 将所有数以{总大小,切割次数}的形式丢尽堆中, 因为题目要让总权值最小,那么优先取出:再切割一次,权值变化更大的即可. ...

  7. Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(贪心)

    传送门 题目大意 给出nnn个萝卜,现在需要分成长度为正整数的若干个萝卜,定义每个长度为xxx的胡萝卜贡献为x2x^2x2,问最小的贡献是多少. 解题思路 手玩一下样例,还是不难得出对于一个胡萝卜若需 ...

  8. CF(Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)

    原题链接 题意: 给你n个数,要你把n个数切成k个.求切后最小平方和. 题解 一开始就想着把每个数放进优先队列里,然后把最大的平分,再放回去.但这样是错的.如1 3 100 :33 33 34会更好. ...

  9. Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)

    原题链接 题意 有N个萝卜,K只兔子,要求把N个萝卜分成K份,一个兔子吃一个长为X的萝卜的时间为X*X,求怎么分能使最后的时间最短. 思路 刚看到这个题的时候,刚开始的思路是,把所有的萝卜都存在一个大 ...

最新文章

  1. 基于Python和OpenCV的目标跟踪学习教程 Object Tracking using Python and OpenCV
  2. 关于类DOTA游戏多样化技能系统的设计思考
  3. JSON.stringify时间的问题
  4. UI素材模板|数据可视化APP界面
  5. 为什么你学了 N 遍 Spring Boot,至今还是学生项目?你的问题在这里 | 原力计划...
  6. Windows中MySQL主从数据库搭建(二)
  7. C#高级编程----反射的小结
  8. java 移位运算符
  9. 关于PX像素、PT点数、CM厘米、MM毫米之间的换算
  10. 微信小程序自定义yPicker组件分析及省市区三级联动实现
  11. 重启explore(桌面进程)
  12. Scratch 与C语言实现数据结构静态链表的建立及操作
  13. Python-玩转数据-动态地图
  14. hbuilder边框代码是什么_HBuilderX自定义UI主题界面风格
  15. 【附源码】计算机毕业设计JAVA东理咨询交流论坛
  16. springboot RabbitMQ整合出现Reply received after timeout 异常
  17. Hello Tarjan ---- Tarjan算法小结
  18. python 量化交易 库_Quant-trading:Python量化交易策略库
  19. android 坚挺通话广播_Android智能机 摩托罗拉MileStone坚挺
  20. 霍涛的MongoDB是数据库,霍涛丰富数据结构

热门文章

  1. 2021-2027全球与中国同种异体人类软骨细胞市场现状及未来发展趋势
  2. 记录HP刀箱故障处理
  3. Java基础——Stream
  4. MATLAB数学建模:智能优化算法-神经网络算法
  5. Project为项目设置预算
  6. 华为手机备份的通讯录是什么文件_华为手机资料备份与恢复教程(含联系人短信图片程序等)...
  7. 面朝大海,爱上春暖花开
  8. 二层广播风暴(产生原因+判断+解决)
  9. Unity时光倒流效果实现
  10. freescale imx6 编译 linux ltib,i.MX6 Ltib编译报错,请版主解决一下。(已解决)