题目
给你一块长木板,其长度为L,要求将其切割成若干块指定大小的木板,大小分别为a,b,c,d... 其中L恰好等于a+b+c+d+...,每切割一次,所需的花费为当前执行切割操作的木板的的长度。比如将长度为P的木板切割为K和H,则花费为P。求最小的花费的切割方法的所需花费。
输入
第1行给出整数 N,N代表切割后的木板的个数 第2到N+1行,每行给出1个整数,代表一块切割后的木板的长度
输出
输出一行,该行含有一个整数K,K代表题意所需的结果。
样例
Sample Input
3
8
5
8
Sample Output
34
AC代码
#include<iostream>
#include<queue>
#include <vector>
using namespace std;
int main()
{
long long a,n,sum=0,ans=0;
priority_queue<long long int,vector<long long int>,greater<long long int> >Quene; //这是最大值优先的队列
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a;
Quene.push(a);
}
while(Quene.size()>1)
{
sum=Quene.top();
Quene.pop();
sum+=Quene.top();
Quene.pop();
ans+=sum;
Quene.push(sum);
}
cout<<ans<<endl;
return 0;
}
题源:poj.org/problem?id=…