求调
查看原帖
求调
547238
篮网总冠军楼主2024/8/3 11:06
#include <bits/stdc++.h>
using namespace std;

int a[105];
bool vis[105];
int n,cnt;
bool flag;
void dfs(int w,int l,int l1){
	if (flag) return; 
	if (l1==l) {
		flag=1;return;
	}
	if (l1>l) return;
	for(int i=w+1;i<=n;i++){
		if (l-l1<a[i]) break;
		vis[i]=1;
		dfs(i,l,l1+a[i]);
		if (flag) return;
		vis[i]=0;
	}
}
bool ok(int k){
	int l=cnt/k;
	for(int i=1;i<=k;i++){
		int s=1;
		while(vis[s]) s++;
		vis[s]=1;
		flag=0;
		dfs(s,l,a[s]);
		if (!flag) return false;
	}
	return true;
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++) {
		cin>>a[i];
		cnt+=a[i];
	}
	sort(a+1,a+1+n);
	for(int i=cnt;i>=1;i--){
		if (cnt%i!=0) continue;
		if (ok(i)) {
			cout<<i<<endl;
			return 0;
		}
	}
	return 0;
}

2024/8/3 11:06
加载中...