问题标题: 酷町堂:1218 石子合并

0
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
汪宇航
汪宇航
新手启示者
新手启示者

是的,有一次我看我3个朋友都没用区间dp,结果1个15,1个25,1个80。。。

0
0
汪宇航
汪宇航
新手启示者
新手启示者

区间dp

+

while循环

+

if结构

+

for循环

+

函数

我要回答