//最优合并问题
//贪心算法即整体最优解是通过局部最优解得到,想要得到最少的比较次数是通过合并序列中最短的两个,最多的比较次数是通过合并序列中最长的两个。
#include <bits/stdc++.h>
using namespace std;
const int N=100;
int main(){
int k,a[N],b[N],sum1=0,sum2=0;
cout<<"请输入待合并序列的个数:";
cin>>k;
cout<<"请输入每个序列的长度:";
for(int i=0;i<k;i++){
cin>>a[i];
}
sort(a,a+k);
for(int i=0;i<k;i++){
b[i]=a[i];
}
for(int i=0;i<k-1;i++){
sum1+=a[i]+a[i+1]-1;
a[i+1]=a[i]+a[i+1];
}
cout<<"最少比较次数:"<<sum1<<endl;
for(int i=k-1;i>0;i--){
sum2+=b[i]+b[i-1]-1;
b[i-1]=b[i]+b[i-1];
}
cout<<"最多比较次数:"<<sum2<<endl;
return 0;
}