您的位置:首页 > Web前端

POJ 3253 Fence Repair

2015-02-01 22:27 232 查看
手动用数组模拟一个哈夫曼树即可

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int a[20005];
int main() {
int n;
long long ans = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);

while (n > 1) {
int mi1 = 0, mi2 = 1;  //  mi1最小, mi2第二小

if (a[mi1] > a[mi2])
swap(mi1, mi2);

for (int i = 2; i < n; i++) {
if (a[i] < a[mi1]) {
mi2 = mi1;
mi1 = i;
} else if (a[i] < a[mi2]) {
mi2 = i;
}
}

int t = a[mi1] + a[mi2];
ans += t;

a[mi1] = t;
a[mi2] = a[n - 1];
n--;
}
printf("%lld\n", ans);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: