首页 > 代码库 > 【Huffman】Fence Repair(POJ 3253)
【Huffman】Fence Repair(POJ 3253)
题目大意:
农夫约翰为了修理栅栏,要将一块很长的木板切割成N块。准备切成的木板的长度为L1、L2、Ln,未切割前木板的长度恰好为切割后木板长度的总和。每次切断木板时,需要的开销为这块木板的长度。举个栗子,长21的木板切成5、8、8三块木板,21切成13和8时,开销为21;13切成5和8时开销13,所以合计开销是34。求将木板切割完最小的开销是多少。
输入:
3
8
5
8
输出:
34
分析:
开销是由两个木板加起来的长度决定的,所以应每次取最小和次小的木板相加才能让总开销最小,因此想到Huffman,用priority_queue将最小和次小的pop,将他们的和push,直到队列的大小为1。
程序代码:
#include <iostream> #include <queue> using namespace std; int main() { int N; int t; int ans=0; priority_queue<int,vector<int>,greater<int> >q; cin>>N; for(int i=0;i<N;i++){ cin>>t; q.push(t); } while(q.size()!=1){ t=0; t+=q.top(); q.pop(); t+=q.top(); q.pop(); ans+=t; q.push(t); } cout<<ans<<endl; return 0; }
【Huffman】Fence Repair(POJ 3253)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。