Poj 3253
题目:http://poj.org/problem?id=3253
题目分析:
题目大意:用一块足够大的木板,分割成一块块的木材做成栅栏,但是得收费,每割x长的木板花x块钱。但是这题的代码做法相反。收费的长度可以等于两个两个拼起来。
代
码:
#include <iostream>
#include <queue>
#include <functional>
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int main()
{
int n;
while(cin >> n && n)
{
while(n--)
{
int tmp;
cin >> tmp;
q.push(tmp);
}
long long res = 0;
while(q.size() > 1)
{
int min1 = q.top();
q.pop();
int min2 = q.top();
q.pop();
int sum = min1 + min2;
res += sum;
q.push(sum);
}
cout << res << endl;
}
return 0;
}