#include<bits/stdc++.h>
using namespace std;
int n,a[3001],nn;
int m,m1,mi=1000000;
int sum;
int main(){
cin>>n>>a[1]>>a[2];
nn=n;
m=1,m1=2,mi=a[1]+a[2];
for(int i=3;i<=n;i++){
cin>>a[i];
if(a[i-1]+a[i]<mi){
mi=a[i-1]+a[i];
m=i-1,m1=i;
}
}
sum=mi;//4
a[m]=mi;//m=3
for(int i=m1;i<n;i++){
a[i]=a[i+1];
}
//for(int i=1;i<=n-1;i++){
// cout<<a[i]<<"#0 ";
//}
//cout<<" &"<<sum<<"#0"<<" ";
n-=1;
for(int j=1;j<=nn-2;j++){
mi=1000000;
for(int i=2;i<=n;i++){
if(a[i-1]+a[i]<mi){
mi=a[i-1]+a[i];
m=i-1,m1=i;
}
}
sum+=mi;
a[m]=mi;
for(int i=m1;i<n;i++){
a[i]=a[i+1];
n-=1;
}
//for(int i=1;i<=n;i++){
// cout<<a[i]<<"#"<<j<<" ";
//}
//cout<<" &"<<sum<<"#"<<j<<" ";
}
cout<<sum<<endl;
return 0;
}
我是每次遍历合并的最小值来做的,处理完往前补空。哪位大佬指点一下问题?包玄关的~