毕业啦(20分)
- 问题描述
小刘同学即将毕业,他准备打包自己的行李,每一次打包,他都可以把两件行李打包成一件,消耗的体力是两件行李重量之和,经过n-1次打包,行李就变成一件了。小刘在打包行李时总共消耗的体力是每次打包所耗体力之和。
- 输入
每组数据输入包括两行,第一行是一个整数 n(1<=n<=10000),表示行李的个数,如果 n 等于 0 表示输入结束,且不用处理。第二行包含 n 个整数,用空格分隔,第 i 个整数(1<=ai<=1000)是第 i 件行李的数目。
- 输出
对于每组输入,输出一个整数并换行,这个值也就是最小的体力耗费值。输入数据保证这个值小于 2^31
- 输入样例
3
42 708 119
4
749 522 629 823
6
55 323 489 378 618 194
0
- 输出样例
1030
5446
4935
问题解析
每次找到最小重量的行李进行打包就好
#include<bits/stdc++.h>
using namespace std;
int main(){
while(1){
int n;
cin>>n;
if(n == 0) break;
int a[n];
for(int i = 0;i < n;i++){
cin>>a[i];
}
sort(a,a+n);
int sum = 0;
for(int i = 1;i < n ;i++){
sum += a[i - 1]+a[i];
a[i] = a[i - 1] + a[i];
sort(a+i,a+n);
}
cout<<sum<<endl;
}
}