poj3253 Fence Repair —huffman&&贪心(离散数学233)

来源:互联网 发布:linux常用命令有哪些 编辑:程序博客网 时间:2024/06/05 05:41
题意给出一组数,使之组成权值最小的二叉树

开始时题意理解错了,以为每次只砍一段。

注意的是,和要用longlong类型,int会wa。

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int main(){    int n;    int a[50005];    scanf("%d",&n);    for(int i=0;i<n;i++)        scanf("%d",&a[i]);    sort(a,a+n);    long long sum1=0;    long long sum=a[0]+a[1];    for(int i=0;i<n-1;i++)    {        sum1+=sum;        //cout<<sum<<endl;        for(int j=i+2;j<n;j++)        {            if(sum>a[j])            {                a[j-1]=a[j];                a[j]=sum;            }            else            {                a[j-1]=sum;                break;            }        }        sum=a[i+1]+a[i+2];        //for(int k=0;k<n;k++)            //printf("a%d %d ",k,a[k]);        //cout<<endl;    }    printf("%lld",sum1);    return 0;}





原创粉丝点击