算法训练 毕业啦(20分)c++实现

毕业啦(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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值