79分求助,好像是搜索出问题了
查看原帖
79分求助,好像是搜索出问题了
366468
_Z_Y_X_SWS楼主2022/7/26 11:51
#include <bits/stdc++.h>
using namespace std;
int a[1000],n,num,ans,top;
bool b[1000],ok;
int cmp (int xx,int yy){
	return xx>yy;
}
void ss(int nz,int sum,int l){
	if (sum>nz){
		return;
	}
	if (sum==nz){
		ok=1;
		return;
	}
	for (int i=l;i<=n;i++){
		if (b[i]==0&&sum+a[i]<=nz){
			b[i]=1;
			ss(nz,sum+a[i],i);
			if (ok==1){
				return;
			}
			
			b[i]=0;
		}
	}
}
int main (){
	cin>>n;
	for (int i=1;i<=n;i++){
		cin>>a[i];
		top=max(a[i],top);
		num+=a[i];
	}
	sort(a+1,a+n+1,cmp);
	for (int j=n;j>0;j--){
		if (num/j<top){
			continue;
		}
		if (num%j==0){
			for (int i=1;i<=n;i++){
				b[i]=0;
			}
			for (int i=1;i<=j;i++){
				ok=0;
				ss(num/j,0,1);
				if (ok==0){
					break;
				}
			}
			if (ok==1){
				cout<<num/j;
				return 0;
			}
		}
	}
	return 0;
}

2022/7/26 11:51
加载中...