萌新54pts求助
查看原帖
萌新54pts求助
542974
William_qwq楼主2022/1/23 10:32
#include<bits/stdc++.h>
using namespace std;
int mx=0,sum=0,n,len;
int a[100],vis[100];
bool flg=0;
bool cmp(int x,int y)
{
	return x>y;
}
void dfs(int tot,int l,int now)
{
	//printf("%d %d %d",tot,l,now);
	int i;
	if(flg) return ;
	if(tot==n&&l==0) 
	{
		flg=1;
		return;
    }
    int last=-1;
	for(i=now;i<=n;i++)
	{
		if(vis[i]) continue;
		if(a[i]+l<=len)
		{
			if(l+a[i]==last) continue;
			last=l+a[i];
			vis[i]=1;
			if(a[i]+l==len) dfs(tot+1,0,1);
			else dfs(tot+1,l+a[i],i+1);
			vis[i]=0;
			if(a[i]+l==len||l==0) break;
		}
	}
}
int main()
{
	int i,j,k;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		mx=max(mx,a[i]);
		sum+=a[i];
	}
	for(len=mx;len<=sum;len++)
	{
		//printf("%d %d\n",sum,len);
		if(!(sum%len))
		{
			flg=0;
			dfs(0,0,1);
			if(flg==1)
			{
				cout<<len;
				break;
			}
		}
	}
	return 0;
}
2022/1/23 10:32
加载中...