Fence Repair
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 55661   Accepted: 18331

Description

Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer length Li (1 ≤ Li ≤ 50,000) units. He then purchases a single long board just long enough to saw into the N planks (i.e., whose length is the sum of the lengths Li). FJ is ignoring the "kerf", the extra length lost to sawdust when a sawcut is made; you should ignore it, too.

FJ sadly realizes that he doesn't own a saw with which to cut the wood, so he mosies over to Farmer Don's Farm with this long board and politely asks if he may borrow a saw.

Farmer Don, a closet capitalist, doesn't lend FJ a saw but instead offers to charge Farmer John for each of the N-1 cuts in the plank. The charge to cut a piece of wood is exactly equal to its length. Cutting a plank of length 21 costs 21 cents.

Farmer Don then lets Farmer John decide the order and locations to cut the plank. Help Farmer John determine the minimum amount of money he can spend to create the N planks. FJ knows that he can cut the board in various different orders which will result in different charges since the resulting intermediate planks are of different lengths.

Input

Line 1: One integer N, the number of planks 
Lines 2..N+1: Each line contains a single integer describing the length of a needed plank

Output

Line 1: One integer: the minimum amount of money he must spend to make N-1 cuts

Sample Input

3
8
5
8

Sample Output

34

Hint

He wants to cut a board of length 21 into pieces of lengths 8, 5, and 8. 
The original board measures 8+5+8=21. The first cut will cost 21, and should be used to cut the board into pieces measuring 13 and 8. The second cut will cost 13, and should be used to cut the 13 into 8 and 5. This would cost 21+13=34. If the 21 was cut into 16 and 5 instead, the second cut would cost 16 for a total of 37 (which is more than 34).

Source

USACO 2006 November Gold

题意:

有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度

给定各个要求的小木板的长度,及小木板的个数n,求最小费用

解题思路:

使用贪心策略,跟Huffman树求最小码长的思想是一样的。

要使总费用最小,那么每次只选取最小长度的两块木板相加,再把这些“和”累加到总费用中即可

使用优先级队列Priority Queues维护一个小顶堆,priority_queue<int,vector<int>,greater<int> >

要注意写法“> >”,写成“>>”的话编译器会误认为是移位运算符

这样每次取两个队头元素(最小的两个int)

木板的块数N (1 ≤ N ≤ 20,000) ,每块木板的长度 Li (1 ≤ Li ≤ 50,000)

所以要使用 __int64进行钱数的加和计算,int会WA

优先级队列=》STL priority_queue

        STL -- heap结构及算法

 1 #include<queue>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     while(cin>>n)
 8     {
 9         __int64 sum = 0;
10         ///建立优先队列,优先级定义为数字小的优先级大
11         ///而且要注意写法“> >”,写成“>>”的话编译器会误认为是移位运算符
12         priority_queue<int,vector<int>,greater<int> > planks;
13         for(int i=0;i<n;i++)
14         {
15             int temp;
16             cin>>temp;
17             planks.push(temp);
18         }
19         while(planks.size() != 1)
20         {
21             int temp = 0;
22             temp += planks.top();//取队头元素
23             planks.pop();
24             temp += planks.top();
25             planks.pop();
26             sum+=temp;
27             planks.push(temp);
28         }
29
30         cout<<sum<<endl;
31
32
33     }
34     return 0;
35 }

转载于:https://www.cnblogs.com/yxh-amysear/p/8444291.html

POJ 3253 -- Fence Repair相关推荐

  1. POJ 3253 Fence Repair(修篱笆)

    POJ 3253 Fence Repair(修篱笆) Time Limit: 2000MS   Memory Limit: 65536K [Description] [题目描述] Farmer Joh ...

  2. POJ 3253 Fence Repair C++ STL multiset 可解

    Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 53106 Accepted: 17508 Descri ...

  3. 贪心算法-----poj 3253 Fence Repair(切木板)

    Description Farmer John wants to repair a small length of the fence around the pasture. He measures ...

  4. POJ 3253 Fence Repair 贪心

    每次合并选最短的两块木板,用优先队列优化. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include&l ...

  5. POJ No. 3253 Fence Repair

    POJ No. 3253 Fence Repair 官方地址 题目 农夫约翰为了修理栅栏,要将一块很长的木板切割成N块.准备切成的木板的长度为L1.L2.-.LN,未切割前木板的长度恰好为切割后木板长 ...

  6. POJ 3253 - Fence Repai ( 优先队列 )

    题意 切割木板, 比如一根长21的木板要切割成5, 8, 8的三块, 每次切割花费的金额为两断的长度. 比如先把21切成16和5, 花费21元, 再把16切成8和8, 花费16元, 总计消费37元. ...

  7. Fence Repair (二叉树求解)(优先队列,先取出小的)

    题目链接:http://poj.org/problem?id=3253 Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  8. [BZOJ1724][Usaco2006 Nov]Fence Repair 切割木板

    1724: [Usaco2006 Nov]Fence Repair 切割木板 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1272  Solved: ...

  9. 老BOJ 07 Fence Repair

    Fence Repair Accept:199     Submit:784 Time Limit:1000MS     Memory Limit:65536KB Description Farmer ...

最新文章

  1. linux 和windows 下golang安装
  2. ilpimage to bitmap
  3. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
  4. 计算机网络技术协议名词解释,网络协议名词解释
  5. DevExpress的TextEdit、RadioGroup、ColorPickEdit设置默认值
  6. spring cloud连载第一篇之bootstrap context
  7. mysql 7天自动拒单功能,mysql查询最近7天的数据,没有数据自动补0
  8. 解决宿主机Ping不通虚拟机的问题
  9. 发布Drools Workbench到Tomcat on Linux
  10. a,b值进行交换的方法
  11. 什么是LAMP架构?
  12. imx6q 转换LVDS为VGA输出
  13. 阿里云Landing Zone系列--1云治理中心使用
  14. 【磨刀不误砍柴工】keil软件仿真评估代码运行时间
  15. node.js代码总结
  16. 找出n以内最大的质数。python
  17. java 获取当前是周几_java 获取今天(某一天)是星期几/周几
  18. html form表单提交
  19. 网站运营中同时把握好网站推广和用户体验度
  20. phpMyAdmin 常见漏洞利用记录

热门文章

  1. webpack4.0各个击破(2)—— CSS篇
  2. Android 7.1.1 去感叹号
  3. 《HTTPS权威指南》- SSL、TLS和密码学学习笔记
  4. windows XP上实现python2.7.5和python3.4.3共存
  5. 搭建分布式架构4--ZooKeeper注册中心安装
  6. ToolBarTray与ToolBarPanel的区别
  7. 执行计划重编译的时机
  8. 软件工程 - 团队博客第二阶段成绩
  9. Sichuan University Programming Contest 2011 Preliminary(for Non-SCUers) / M A Simple Problem
  10. 艰难的原创——谈互联网创业