求助,为什么最大值算不对
查看原帖
求助,为什么最大值算不对
483786
panda1楼主2023/10/4 21:35

代码:

#include<bits/stdc++.h>
using namespace std;
int a[114],n,anm,anx,fc,phi,m1,m2,g[114];
struct su{
	int st,ed,sm;
}u[114];
void sum(int c[]){
	for(int i=1;i<=m1;i++){
		if(i!=m1){
			u[i].sm=c[i]+c[i+1];
			u[i].st=i;
			u[i].ed=i+1;
		}
		else{
			u[i].sm=c[m1]+c[1];
			u[i].st=m1;
			u[i].ed=1;
		}	
	}
}
void sum2(int c[]){
	for(int i=1;i<=m2;i++){
		if(i!=m2){
			u[i].sm=c[i]+c[i+1];
			u[i].st=i;
			u[i].ed=i+1;
		}
		else{
			u[i].sm=c[m2]+c[1];
			u[i].st=m2;
			u[i].ed=1;
		}	
	}
}
void move(int c[],int rr,int q){
	for(int i=rr;i<=q;i++)
	a[i]=a[i+1];
}
int main(){
	int sb=0,iga;
	cin>>n;
	m1=n,m2=n;
	for(int i=1;i<=n;i++){
	cin>>a[i];
	g[i]=a[i];
    }
	sum(a);
	while(m1>1){
		phi=2114514810;
		for(int i=1;i<=m1;i++)
		if(phi>u[i].sm){
			sb=u[i].ed;
			iga=u[i].st;	
			phi=u[i].sm;
		}
		
		a[sb]+=a[iga];
		anm+=a[sb];
		move(a,iga,m1);
		m1--;
		sum(a);
	}
	sum(g);
	while(m2>1){
		phi=0;
		for(int i=1;i<=m2;i++)
		if(phi<u[i].sm){
			sb=u[i].ed;
			iga=u[i].st;	
			phi=a[iga]+a[sb];
		}
		g[sb]+=g[iga];
		anx+=g[sb];
		move(g,iga,m2);
		m2--;
		sum2(g);
	}
	cout<<anm<<endl<<anx;
} 
2023/10/4 21:35
加载中...