69分求调,剪不动了
查看原帖
69分求调,剪不动了
754444
tamamocross楼主2023/8/27 00:15
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max=70;
int n,sum;
int a[Max];
bool searched[Max];
void dfs(int k,int c,int l,int lp){
	//cout<<k<<" "<<c<<" "<<l<<endl;
	if(c==0){
		cout<<l;
		exit(0);
	}
	if(k==0){
		dfs(l,c-1,l,0);
		return;
	}	
	for(int i=lp+1;i<=n;i++){
		int t=0;	
		if(!searched[i]&&k>=a[i]&&a[i]!=a[t]){
			searched[i]=1;
			dfs(k-a[i],c,l,i);
			t=i;
			searched[i]=0;
		if(lp==0||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(int i=val;i<=sum;i++){
		if(sum%i==0){
			dfs(i,sum/i,i,0);	
		//	cout<<i<<endl;
		}
	}
} 
2023/8/27 00:15
加载中...