题目描述
有多个视频需要合并为一个视频,假设一次只能将两个视频进行合并,合并需要的时间为该两个视频的时间之和。请计算将多个视频合并为一个视频需要的最小时间为多少?
输入
输入的第一行包含一个正整数n,表示共有n个视频需要合并。其中n不超过100。 第二行中有n个用空格隔开的正整数,分别表示n个视频的时间。
输出
输出包括一个正整数,即合并需要的最小时间。
样例输入
8
5 29 7 8 14 23 3 11
样例输出
有多个视频需要合并为一个视频,假设一次只能将两个视频进行合并,合并需要的时间为该两个视频的时间之和。请计算将多个视频合并为一个视频需要的最小时间为多少?
输入
输入的第一行包含一个正整数n,表示共有n个视频需要合并。其中n不超过100。 第二行中有n个用空格隔开的正整数,分别表示n个视频的时间。
输出
输出包括一个正整数,即合并需要的最小时间。
样例输入
8
5 29 7 8 14 23 3 11
样例输出
#include <iostream>
#include <stdlib.h>
#include<stdio.h>
#include<string>
#define N 0x3f3f3f3f;
using namespace std;
int main(){
int n;
int ship[100];
while(scanf("%d",&n)!=EOF){
//cin>>n;
for(int k=0;k<100;k++){
ship[k]=N;
}
int length=n;
int i=0;
while(length--){
cin>>ship[i++];
}
if(n==1){
cout<<ship[0]<<endl;
// return 0;
} else {
int sum=0,min1,min2;
for(int x=0;x<(n-1);x++){
min1=min2=N;
int m1,m2;
for(int y=0;y<n;y++){
if(ship[y]<min1){
min1=ship[y];
m1=y;
}
if(min1<min2){
int temp=min1;
min1=min2;
min2=temp;
int temp2=m2;
m2=y;
m1=temp2;
}
}
sum+=min1+min2;
ship[m1]=min1+min2;
ship[m2]=N;
}
// system("pause");
cout<<sum<<endl;
}
}
return 0;
}