首页 > 学院 > 开发设计 > 正文

poj 3253 Fence Repair(优先队列)

2019-11-10 20:07:28
字体:
来源:转载
供稿:网友

题目:农夫约翰要修补围墙,他有一块很长的木板,要把木板锯成N块木板,所锯木板的长度就是花费,问如何花费最小。比若8 8 5,总长度是21,所以第一次锯要花费21,木块据成8 13,然后13锯成8 5,花费13,总花费为13+21=34.令一种锯法是分成16 5,再分成8 8,但这样的花费是16+21=37。求花费最小就是用huffman思想,用优先队列做。

#include <queue>#include <iostream>using namespace std;int main(){ int n,num; long long res = 0; int a,b; cin >> n; PRiority_queue<int,vector<int>,greater<int> > que; for(int i = 0; i < n; ++i) { cin >> num; que.push(num); } while(que.size() != 1) { a = que.top(); que.pop(); b = que.top(); que.pop(); res += (a+b); que.push(a+b); } cout << res << endl; return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表