农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候,需要的开销为这块木板的长度,例如长

#include
#include
struct cmp
{
    bool operator()(const long long &i,const long long &j)
    {
        return i>j;
    }
};
using namespace std;
int main()
{
    priority_queue<long long,vector<long long>,cmp> s;
    int n;
    cin>>n;
    for(int i=0;i)
    {
        int hh;
        scanf("%d",&hh);
        s.push(hh);
    }
    long long ans=0;
    while(n>=2)
    {
        int a,b;
        a=s.top();
        s.pop();
        b=s.top();
        s.pop();
        s.push(a+b);
        ans+=a+b;
        n--;
    }
    cout<endl;
    system("pause");
}

你可能感兴趣的:(农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候,需要的开销为这块木板的长度,例如长)