Why just 70 pts?
查看原帖
Why just 70 pts?
1040770
Demo_B11楼主2023/8/17 20:40

Here is 代码:

#include<bits/stdc++.h>
using namespace std;
int n,ai=1,bi=1,ans;
void Combine_the_fruits(int a[],int n){
	if(n==1){
		return;
	}
	int *b=new int[n+10],bi=1,ai=1,bt=1;
	b[bi++]=a[1]+a[2];ans+=a[1]+a[2];
	ai=3;
	while(ai<=n){
		if(ai==n){
			b[bi]=a[ai]+b[bt];
			ans+=a[ai]+b[bt];
			bt++;bi++,ai++;
			continue;
		}
		int minn,tmp=a[ai];
		if(b[bt]<a[ai+1]){
			b[bi]=b[bt]+a[ai];
			ans+=b[bt]+a[ai];
			bt++;
		}else{
			b[bi]=a[ai]+a[ai+1];
			ans+=a[ai]+a[ai+1];
			ai++;
		}bi++,ai++;
	}bi--;
	int i,k;
	memset(a,0,sizeof(a));
	for(i=1,k=bt;k<=bi;k++){
		a[i++]=b[k];
	}i--;
	Combine_the_fruits(a,i);
}
int main(){
	scanf("%d",&n);
	int *a=new int[n+10],*b=new int[n+10];
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}sort(a+1,a+n+1);
	if(n==1){
		printf("%d",a[1]);
		return 0;
	}
	Combine_the_fruits(a,n);
	printf("%d",ans);
	return 0;
}

2023/8/17 20:40
加载中...