27分求调
查看原帖
27分求调
1343308
IAKIOI66666楼主2024/8/27 11:07
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
long long a[100],v[100],n,len,val,cnt,sum;
int dfs(int stict,int cab,int last){
	if(stict==cnt)return true;
	if(cab==len)return dfs(stict+1,0,1);
	int fail=0;
	for(int i=last;i<=n;i++){
		if(!v[i]&&cab+a[i]<=len&&fail!=a[i]){
			v[i]==1;
			if(dfs(stict,cab+a[i],i+1))return true;
			fail=a[i];
			v[i]=0;
			if(cab+a[i]>len)return false;
		}
	} 
	return false;
}
int main(){
	cin>>n;
	val=0,cnt=0,sum=0,len=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i],val=max(val,a[i]);
	}
	sort(a+1,a+1+n);
	reverse(a+1,a+1+n);
	for(len=val;len<=sum;len++){
		if(sum%len)continue;
		cnt=sum/len;
		memset(v,0,sizeof(v));
		if(dfs(0,0,1))break;
	}
	cout<<len<<endl;
	return 0;
}
2024/8/27 11:07
加载中...