麻婆豆腐是小奏最爱的食物,为了做出最上等的麻婆豆腐,小奏准备了若干上等的食材,并且获得了传说中的麻婆豆腐的料理方法:每次将两种食材合二为一,成为一种新的食材,直到所有的食材都合并到一起,传说中的麻婆豆腐就做成了!
然而,每种食材都有不同的料理难度,每次料理两种食材所需的时间是两种食材料理难度相加;而合二为一的新食材料理难度也是两种食材的料理难度相加。
输入要求
数据有多组输入,第一行输入一个整数n(1<=n<=100),表示食材的数量;接下来一行为n个整数ai(1<=ai<=100),表示每种食材的料理难度。以EOF结束。
输出要求
对于每组数据,每行输出一个整数,为最短花费时间。
测试数据
输入示例
3
1 3 2
5
1 1 1 1 1
1
15
输出示例
9
12
0
小贴士
声明:本套题目由ACM协会内一腐宅命题,其中可能出现奇怪的模型与题目设定,相关设定不代表协会观点与立场。
题目来源
2014年BNUZ-ACM新生赛现场赛原题命题:北京师范大学珠海分校ACM协会陈思佳
- #include<bits/stdc++.h>
- using namespace std;
- int main() {
- int n;
- while(cin >> n) {
- int i, a[1000];
- for(i = 0; i < n; i++) {
- cin >> a[i];//输入数据
- }
- //稍微观察一下可知,由小到大来相加花费时间是最短的(贪心?)
- int sum = 0, k = 0;//sum来存答案,k来控制数组
- for(i = 0; i < n - 1; i++) {//两两相加循环n-1次
- sort(a, a + n - k);//每次都排序,但是排序的数组越来越小,因为食材都在合并。
- int tmp = a[0] + a[1];//最小的两个相加
- a[0] = tmp;//欢迎新数据!!
- a[1] = a[n - 1 - k];//压缩数组
- sum += tmp;//存答案
- k++;//自增
- }
- cout << sum << endl;
- }
- }
抛砖引玉。