20,救命鸭
查看原帖
20,救命鸭
787693
dangdang07楼主2024/12/22 11:39
#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;
}

我是每次遍历合并的最小值来做的,处理完往前补空。哪位大佬指点一下问题?包玄关的~

2024/12/22 11:39
加载中...