18分求助
查看原帖
18分求助
737028
xiamingxuan_IWoLongI楼主2023/8/3 10:17

rt

#include<bits/stdc++.h>
using namespace std;
int n;
int a[105];
int book[105];
int max_,ans;
int l,q,x;
bool cmp(int x,int y) {
	return x>y;
}
void dfs(int k,int last,int l_) {
	if(k==x) {
		q=1;
		return;
	}
	if(!l_) {
		int i;
		for(i=1; i<=n; i++)
			if(!book[i]) {
				book[i]=1;
				break;
			}
		dfs(k+1,i,l_-a[i]);
	}
	for(int i=last+1; i<=n; i++)
		if(!book[i] && l_>=a[i]) {
			book[i]=1;
			dfs(k,i,l_-a[i]);
			book[i]=0;
			int j=i;
			while(i<n && a[i]==a[j])
				i++;
			if(i==n)
				return;
		}
}
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		max_=max(max_,a[i]);
		ans+=a[i];
	}
	sort(a+1,a+n+1,cmp);
	for(int i=max_; i<=ans; i++)
		if(!(ans%i)) {
			memset(book,0,sizeof(book));
			book[1]=1;
			q=0;
			l=i;
			x=ans/i;
			dfs(1,1,l-a[1]);
			if(q) {
				cout<<l;
				break;
			}
		}
	return 0;
}

样例都没过,救我呜呜

2023/8/3 10:17
加载中...