【求助】请各位大佬帮忙看一下,谢谢
查看原帖
【求助】请各位大佬帮忙看一下,谢谢
113193
xiaokeyu楼主2021/10/19 10:13
#include<bits/stdc++.h>
using namespace std;
int a[4005];
int b[4005];
int n;
int check(){
	int s=0;
	for(int i=1;i<=n;i++){
		if(a[i]<=2139062143&&a[i]>=0){
			s++;
		}
	} 
	if(s==1){
		return -1;
	}
	return 0;
}
int find(){//最小的k 
	for(int i=2;i<=n;i++){
		if(a[i-1]<=a[i+1]){
			return i;
		}
	}
	return -1;
}
int find1(int k1,int sum){//最小的j 
	for(int i=k1;i>=1;i--){
		if(a[i]>sum){
			return i;
		}
	}
	return -1;
}
int hb(){
	int r=0;
	for(int i=1;i<=n;i++){
		if(a[i]==-1){
			continue;
		}
		r++;
		b[r]=a[i];
	}
	memset(a,127,sizeof(a));
	for(int i=1;i<=r;i++){
		a[i]=b[i];
		
	}
	n=r;
}
int main(){
	int ans=0;
	scanf("%d",&n);
	memset(a,127,sizeof(a));
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	int h,h1;
	while(check()!=-1){
		h=find();//k
		a[h-1]+=a[h]; 
		ans+=a[h-1];
		a[h]=-1;
		h1=find1(h,a[h-1]);
		if(h1!=-1){
			swap(a[h-1],a[h1+1]);
		}
		hb();
	}
	cout<<ans;
	return 0;
}
2021/10/19 10:13
加载中...