poj 3253 Fence Repair 貪心
阿新 • • 發佈:2017-11-28
lock cnblogs air rep con scanf tdi urn pri
poj 3253 Fence Repair
題目鏈接:
http://poj.org/problem?id=3253
思路:
哈夫曼樹型貪心
自底向上每次挑選兩個最小的數值相加,相加的值從新合並到數組中,繼續挑選相加
如果每次都要排序的話會超時....
代碼:
#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
typedef long long ll;
const int maxn = 20005;
const ll INF = 500000;
ll a[maxn];
int main() {
ll n,sum;
scanf("%I64d",&n);
for(int i=0;i<n;++i) {
scanf("%I64d",&a[i]);
}
sum=0;
ll minfir,minsec,temp;
while(n>1) {
minfir=0;minsec=1;
if(a[minfir]>a[minsec]) swap(minfir,minsec);
for (int i=2;i<n;++i) {
if(a[i]<a[minfir]) {
minsec=minfir;
minfir=i;
} else if(a[i]<a[minsec]) {
minsec=i;
}
}
temp=a[minfir]+a[minsec];
sum+=temp;
if(minfir==n-1)swap(minfir,minsec);
a[minfir]=temp;
a[minsec]=a[n-1 ];
n--;
}
printf("%I64d\n",sum);
return 0;
}
poj 3253 Fence Repair 貪心