博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
阅读量:7124 次
发布时间:2019-06-28

本文共 1010 字,大约阅读时间需要 3 分钟。

题意:

FJ需要n块木板,第i块木板长度为ai。但他只有一块长度为sigma(i,1,n)ai的木板。每切一次的代价为所切割木板的长度,问最小代价。n≤20000

题解:

等价于合并石子(把单块木板的长度看作石子)。故用一个优先队列,每次找最小的两个堆合并起来再放入优先队列,代价计入答案。

代码:

1 #include 
2 #include
3 #include
4 #include
5 #define inc(i,j,k) for(int i=j;i<=k;i++) 6 #define maxn 20010 7 #define ll long long 8 using namespace std; 9 10 inline int read(){11 char ch=getchar(); int f=1,x=0;12 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();}13 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();14 return f*x;15 }16 int n; ll ans;17 struct nd{ll a; bool operator < (const nd &b)const{
return a>b.a;}}; priority_queue
q;18 int main(){19 n=read(); inc(i,1,n){
int x=read(); q.push((nd){x});}20 inc(i,1,n-1){ll x=q.top().a; q.pop(); ll y=q.top().a; q.pop(); q.push((nd){x+y}); ans+=x+y;}21 printf("%lld",ans); return 0;22 }

 

20160917

转载于:https://www.cnblogs.com/YuanZiming/p/5882878.html

你可能感兴趣的文章
如何用Docker编排容器
查看>>
解决git push代码到github上一直提示输入用户名及密码的问题
查看>>
Angular2生命周期钩子函数
查看>>
【Arduino基础教程】RS1307时钟模块
查看>>
10月22日科技联播:饿了么与屈臣氏达成合作;马蜂窝回应数据造假
查看>>
win10电脑桌面便签怎么固定在桌面?
查看>>
[Spring] Web层AOP方式进行参数校验
查看>>
Java入门之继承(上)
查看>>
《Scikit-Learn与TensorFlow机器学习实用指南》 第05章 支持向量机
查看>>
虚函数表
查看>>
Sublimne text3配置python3和robot开发环境
查看>>
shiro实战系列(十四)之配置
查看>>
MySQL查询数据表中数据记录(包括多表查询)
查看>>
Android Studio目录结构浅析
查看>>
visio 2013 如何制作形状的剪切、联合、组合、拆分、相交、剪除功能
查看>>
从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之一 || 前言...
查看>>
函数式编程与面向对象编程[3]:Scala的OOP-FP混合式编程与抽象代数理论
查看>>
bboss平台子系统切换方法
查看>>
Python全栈 项目(HTTPServer、PiP使用)
查看>>
隐私浏览器 Tor Browser 8.0.8 发布,安全更新版本
查看>>