zoukankan      html  css  js  c++  java
  • poj 3253 Fence Repair 贪心

    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
    ",sum);
        return 0;
    }
    
  • 相关阅读:
    准备工作
    案例分析
    阅读任务
    准备工作
    案例分析作业
    情 202103226-1 编程作业
    阅读任务
    准备工作
    4 20210412-1 原型设计作业
    3 20210405-1 案例分析作业
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7909181.html
Copyright © 2011-2022 走看看