87分求调
查看原帖
87分求调
754444
tamamocross楼主2023/8/27 10:37
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max=70;
int n,sum;
int a[Max];
bool searched[Max];
int l;
inline void dfs(int k,int c,int lp){
	//cout<<k<<" "<<c<<" "<<l<<endl;
	if(c==0){
		cout<<l;
		exit(0);
	}
	if(k==0){
		dfs(l,c-1,0);
		return;
	}
	int t=0;	
	for(int i=lp+1;i<=n;i++){			
		if(!searched[i]&&k>=a[i]&&a[i]!=a[t]){
			searched[i]=1;
			dfs(k-a[i],c,i);
			t=i;
			searched[i]=0;
		if(!lp||k==a[i]){
			return;
			}
		}																
	}	
}
int main(){	
	cin>>n;	
	int val=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		val=max(a[i],val);	
	}
	sort(a+1,a+n+1);
	reverse(a+1,a+n+1); 
	for(l=val;l<=sum/2;l++){
		if(sum%l==0){
			dfs(l,sum/l,0);	
		//	cout<<i<<endl;
		}
	}
	cout<<sum;
} 
2023/8/27 10:37
加载中...