码迷,mamicode.com
首页 > 其他好文 > 详细

poj 3253 Fence Repair 贪心

时间:2017-11-28 13:24:52      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:inf   pre   else   相加   stream   names   std   链接   temp   

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 贪心

标签:inf   pre   else   相加   stream   names   std   链接   temp   

原文地址:http://www.cnblogs.com/lemonbiscuit/p/7909181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!