0
已解决
汪恺恒
中级启示者
中级启示者
题目描述 Description
有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。
输入描述 Input Description
有多组测试数据,输入0截止(n=0)。
每组测试数据第一行有一个整数n,表示有n堆石子。
接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开
输出描述 Output Description
输出总代价的最小值,占单独的一行
样例不对!!
#include<iostream>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
int n,ans;
int main(){
while(cin>>n){
ans=0;
if(!n) break;
priority_queue< int,vector<int>,greater<int> > a;
int x,y;
for(int i=1;i<=n;i++){
cin>>x;
a.push(x);
}
for(int i=1;i<=n-1;i++){
x=a.top();
a.pop();
y=a.top();
a.pop();
a.push(x+y);
ans=ans+x+y;
}
cout<<ans<<endl;
}
return 0;
}
必须用DP吗
0
0
0
0
汪宇航
新手启示者
新手启示者
0