题意:要将一个木板分成几个小的木板,每次的费用是当前木板的大小,求得到所有木板的最小花费
思路:利用Huffman思想,采用优先队列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct node{
long long len;
bool operator<(const node &a)const{
return len > a.len;
}
};
priority_queue<node> s;
int main(){
int n;
node a;
scanf("%d",&n);
for (int i = 0; i < n; i++){
scanf("%lld",&a.len);
s.push(a);
}
long long ans = 0;
while (s.size() > 1){
node x = s.top();s.pop();
node y = s.top();s.pop();
x.len += y.len;
ans += x.len;
s.push(x);
}
printf("%lld\n",ans);
return 0;
}POJ - 3253 Fence Repair,布布扣,bubuko.com
原文:http://blog.csdn.net/u011345136/article/details/20284369