码迷,mamicode.com
首页 > 其他好文 > 详细

合并果子(multiset)

时间:2015-05-02 12:32:38      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:set

合并果子

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 312  Solved: 113
[Submit][Status][Web Board]

Description

现在有n堆果子,第i堆有ai个果子。现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数。求合并所有果子的最小代价。

Input

第一行包含一个整数T(T<=50),表示数据组数。
每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数。
第二行包含n个正整数ai(ai<=100),表示每堆果子的果子数。

Output

每组数据仅一行,表示最小合并代价。

Sample Input

2
4
1 2 3 4
5
3 5 2 1 4

Sample Output

19
33


代码:
#include<cstdio> 
#include<set> 
using namespace std; 
  
multiset<int> mst; 
  
int main() 
{ 
    int t; 
    scanf("%d",&t); 
    while(t--) 
    { 
        mst.clear(); 
        int n; 
        int ans=0; 
        scanf("%d",&n); 
        for(int i=1;i<=n;i++) 
        { 
            int x; 
            scanf("%d",&x); 
            mst.insert(x); 
        } 
        int anss; 
        multiset<int>::iterator it1; 
        multiset<int>::iterator it2; 
        while(mst.size()>1) 
        { 
            it1=it2=mst.begin(); 
            it2++; 
            anss=*it1+*it2; 
            ans=ans+anss; 
            mst.erase(mst.begin()); 
            mst.erase(mst.begin()); 
            mst.insert(anss); 
        } 
        printf("%d\n",ans); 
    } 
    return 0; 
} 



合并果子(multiset)

标签:set

原文地址:http://blog.csdn.net/xky1306102chenhong/article/details/45438599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!