最后一点t了(蒟蒻在线求调)
查看原帖
最后一点t了(蒟蒻在线求调)
1121287
wgl_and_gzy楼主2024/3/6 16:44
#include<bits/stdc++.h>
using namespace std;

int cnt=0,v=0,sum=0,l,s;
int a[100],k[100];

bool dfs(int now,int cab,int last)
{
	if(now>s) return 1;
	if(cab==l) return dfs(now+1,0,1);
	int f=0;
	for(int i=last;i<=cnt;i++)
	{
		if(!k[i] && cab+a[i]<=l && f!=a[i])
		{
			k[i]=1;
			if(dfs(now,cab+a[i],i+1)) return 1;
			f=a[i];
			k[i]=0;
			if(cab==0 || cab+a[i]==l) return 0;
		}
	}
	return 0;
}

int main()
{
	int n;
	while(cin>>n&&n)
	{
		memset(a,0,sizeof(a));
		memset(k,0,sizeof(k));
		cnt=0,v=0,sum=0,l,s;
		for(int i=1;i<=n;i++)
		{
			int x;
			cin>>x;
			if(x>50) continue;
			a[++cnt]=x;
			v=max(v,x);
			sum+=x;
		}
		sort(a+1,a+cnt+1);
		reverse(a+1,a+cnt+1);
		for(l=v;l<=sum;l++)
		{
			if(sum%l) continue;
			s=sum/l;
			memset(k,0,sizeof(k));
			if(dfs(1,0,1)) break;
		}
		cout<<l<<endl;
	}
	return 0;
}
2024/3/6 16:44
加载中...