8月1日的题3253
3253 Fence Repair(贪心、优先队列)
(这道题看后面的算法思路)
题意:有一位农夫需要n块给定长度的木头,去借锯子时的要求是,每锯下一块,就要付出这块木头长度的费用,求最小费用。
输入:(1)n;(2)n块木头的长度;
输出:最小费用。
思路:
1、基本思路:
(1)显然要锯n次,也就是找一个最好的锯的顺序;
(2)从原题hint中看到,有一个隐含的要求是首先把需要的总长度的木头锯下来。从给的例子看,8 8 5三块。先锯下来21,然后有两种顺序,比如:8+8,剩下的自然是5,此事:21+8+8=37;另一种顺序:5+8,剩下是8,此时:21+5+8=34;显然,如果没有一开始要21的要求,用8+8+5,或5+8+8的顺序都能得到3块木头,费用一样。
2、尝试最直接的贪心:
(1)先把总和的长度cut下来;
(2)然后每次cut最小的(这样最后剩下的一块就是最长的),于是总费用最少;
(3)感觉是不是就做个最简单的排序,把最长的木头挑出来,然后其余相加,再加上总和长度,
poj3253 优先队列( poj的bug)
![](https://img-home.csdnimg.cn/images/20240711042549.png)