标签:algorithm greedy acm poj 博客
/* poj 3253 fence repair 题意是说有一个人想要修东西,需要去将一根木头砍成N 段长度指定的木头,现在给定这根木头需要的长度集合 问最少花费是多少 算法设计:贪心的去选择较短的合成,每次都选择最短的两条 最后合成一根木头,也就是还原成原来的总长度 */ #include<iostream> #include<queue> #include<functional> using namespace std; typedef long long ll; int N; void solve() { ll ans = 0; priority_queue<int, vector<int>, greater<int> >que; for (int i = 0; i < N; i++){ int in; cin >> in; que.push(in); } //input done while (que.size()>1){ int t1, t2; t1 = que.top(),que.pop(); t2 = que.top(), que.pop(); ans += t1 + t2; que.push(t1+t2); } cout << ans << endl; } int main() { while (cin >> N){ solve(); } return 0; }
标签:algorithm greedy acm poj 博客
原文地址:http://blog.csdn.net/hujian_/article/details/44839053