【POJ-3253】Fence Repair

138 阅读1分钟
题目

给你一块长木板,其长度为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=…