POJ 3253 - Fence Repai ( 优先队列 )
2018-03-13 20:32
363 查看
题意
切割木板, 比如一根长21的木板要切割成5, 8, 8的三块, 每次切割花费的金额为两断的长度. 比如先把21切成16和5, 花费21元, 再把16切成8和8, 花费16元, 总计消费37元. 若先把21切成13和8, 花费21元, 再把13切成8和5, 花费13元, 总计消费34元, 花销更少现在就要求出最小开销
思路
这道题可以用贪心, 这里主要记录一下白书上提供的优先队列 这个非常好的思路把切割逆向看作拼接过程, 定义一个从小到大排列的优先队列
priority_queue<int, vector<int>, greater<int> > fen;
每次取出最短的两根木板拼接, 再将这个拼接后的长木板推入优先队列
直到fen.size() == 1, 这时木板被拼接完毕
记得看数据范围需要用long long !!
AC代码
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn = 20000 + 100; priority_queue<int, vector<int>, greater<int> > fen; typedef long long LL; //int s[maxn]; int main() { int n, a; while( ~scanf("%d",&n) ) { LL sum = 0; while( !fen.empty() ) fen.pop(); for( int i = 0; i < n; i++ ){ scanf("%d",&a); fen.push(a); } while( fen.size() > 1 ){ int l1 = fen.top(); fen.pop(); int l2 = fen.top(); fen.pop(); sum += l1 + l2; fen.push(l1+l2); } printf("%lld\n",sum); } return 0; }
相关文章推荐
- poj 3253 Fence Repair【哈夫曼树、优先队列】
- POJ -3253 优先队列 STL
- poj3253——哈夫曼树思想 + 优先队列解决
- Fence Repair POJ - 3253 最小优先队列,哈弗曼树
- poj 3253 最小堆 优先队列 哈夫曼树
- POJ 3253 Fence Repair 优先队列
- POJ 3253 采用优先队列 构造赫夫曼树
- POJ 3253 Fence Repair 哈夫曼树 优先队列
- POJ 3253 STL优先队列
- 优先队列 POJ 3253 Fence Repair
- POJ 3253 Fence Repair 哈夫曼树 优先队列
- POJ 3253 STL优先队列
- poj 3253 【哈夫曼树】【优先队列】
- poj 3253 Fence Repair(优先队列+哈夫曼树)
- poj 3253 类似霍夫曼贪心思想,优先队列的运用
- 20140822 【 优先队列 】 POJ 3253 Fence Repair
- POJ 3253 Fence Repair(STL之优先队列)
- POJ 3253 Fence Repair 堆的应用,优先队列
- POJ 3253-Fence Repair(哈夫曼树-最小值优先队列)
- POJ 3253 优先队列 Fence Repair