题目

1724: [Usaco2006 Nov]Fence Repair 切割木板

Time Limit: 5 Sec  Memory Limit: 64 MB

Description

Farmer John想修理牧场栅栏的某些小段。为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000)。然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和。接下来的工作,当然是把它锯成需要的长度。FJ忽略所有切割时的损失——你也应当忽略它。 FJ郁闷地发现,他并没有锯子来把这块长木板锯开。于是他把这块长木板带到了Farmer Don的农场,想向FD借用锯子。 作为一个有商业头脑的资本家,Farmer Don没有把锯子借给FJ,而是决定帮FJ锯好所有木板,当然FJ得为此付出一笔钱。锯开一块木板的费用,正比于木板的长度。如果这块木板的长度是21,那么锯开它的花费便是21美分。 谈妥条件后,FD让FJ决定切割木板的顺序,以及每次切割的位置。请你帮FJ写一个程序,计算为了锯出他想要的木板,他最少要花多少钱。很显然,按不同的切割顺序来切开木板,FJ的总花费可能不同,因为不同的切割顺序,会产生不同的中间结果。

Input

* 第1行: 一个正整数N,表示FJ需要木板的总数

* 第2..N+1行: 每行包含一个整数,为FJ需要的某块木板的长度

Output

* 第1行: 输出一个整数,即FJ完成对木板的N-1次切割的最小花费

Sample Input

3
8
5
8

FJ打算把一块长为21的木板切成长度分别为8,5,8的三段。

Sample Output

34
输出说明:

起初,木板的长度为21。第一次切割木板花费21美分,把木板切成长分别为13和8的两块。然后花费1
3美分把长为13的木板切成长为8和5的两块。这样的总花费是21+13=34美分。如果第一次把木板切成长
为16和5的两块,那么第二次切木板的花费就是16美分,这样的总花费就是37美分,比刚才花费34美分的方案来的差。

HINT

 

Source

题解

这道题目贪心,每次合成最小的两堆即可。于是乎我们用堆,我已经到了堆都能写错的地步了Orz

代码

 #include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll ans;int n,hp[],sz;
void put(int x)
{
hp[++sz]=x;
int now=sz;
while(now>&&hp[now>>]>hp[now])
{
swap(hp[now],hp[now>>]);
now>>=;
}
}
int get()
{
int t=hp[];hp[]=hp[sz--];
int now=;
while(now<=(sz>>))
{
int next=now<<;
if(next<sz&&hp[next|]<hp[next])next++;
if(hp[next]>=hp[now])return t;
swap(hp[next],hp[now]);
now=next;
}
return t;
}
int main()
{
scanf("%d",&n);
int x,y;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
put(x);
}
for(int i=;i<n;i++)
{
x=get();y=get();
put(x+y);
ans+=x+y;
}
printf("%lld",ans);
return ;
}

最新文章

  1. js Date学习
  2. is_file和file_exists效率比较
  3. HTML DOM 属性记录
  4. 盘点:移动服务 #AzureChat
  5. ISO c++ 14 重点介绍[译]
  6. Mysql 分区详解
  7. XPath编写规则学习
  8. JavaScirpt的this指向 apply().call(),bind()个人笔记
  9. 带着新人简单看看servlet到springmvc
  10. An SDN-NFV Platform for Personal Cloud Services
  11. js生成自定义随机数方法
  12. 简述iproute家族命令
  13. java使用ffmpeg实现上传视频的转码,提取视频的截图等功能
  14. 2019省赛训练组队赛3.26周二---FJUT 2016
  15. linux 操作 json文件
  16. VS中生成时“sgen.exe”已退出,代码为 1解决办法
  17. mysql乐观锁总结和实践(二)
  18. 群里提到的IE设置问题 ---B/S 下页面刷新问题
  19. HAProxy压测及参数调优
  20. LG3812 【模板】线性基

热门文章

  1. 使用jsp标签和java资源管理实现jsp支持多语言
  2. JS操作JSON的方法总结
  3. Control的Invoke和BeginInvoke详解
  4. Hadoop学习之自定义二次排序
  5. 学习PS必须弄懂的专业术语
  6. java——HashCode和equal方法
  7. pyhon MySQLdb查询出来的数据设置为字典类型
  8. Linux中的盘符问题
  9. SQL Server 通配符为目标字符的查找
  10. ie7(z-index)