87pts,求优化
  • 板块P1120 小木棍
  • 楼主wyc_qwq
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/5/30 20:05
  • 上次更新2023/10/23 14:17:37
查看原帖
87pts,求优化
729036
wyc_qwq楼主2023/5/30 20:05
#include<bits/stdc++.h>
using namespace std;
int cnt=0,ans=0,sum=0,y,z,a[100],k[100];
int dfs(int aa,int bb,int cc)
{
	int num=0;
	if(aa>z) 
	{
		return 1;
	}
	if(bb==y) 
	{
		return dfs(aa+1,0,1);
	}
	for(int i=cc;i<=cnt;i++)
	{
		if(!k[i]&&bb+a[i]<=y&&num!=a[i])
		{
			k[i]=1;
			if(dfs(aa,bb+a[i],i+1)) 
			{
				return 1;
			}
			num=a[i];
			k[i]=0;
			if(bb==0||bb+a[i]==y) 
			{
				return 0;
			}
		}
	}
	return 0;
}

int main()
{
	int n;
	while(cin>>n&&n!=0)
	{
		memset(a,0,sizeof(a));
		memset(k,0,sizeof(k));
		cnt=0,ans=0,sum=0,y,z;
		for(int i=1;i<=n;i++)
		{
			int x;
			cin>>x;
			if(x>50) continue;
			a[++cnt]=x;
			ans=max(ans,x);
			sum+=x;
		}
		sort(a+1,a+cnt+1);
		reverse(a+1,a+cnt+1);
		for(y=ans;y<=sum;y++)
		{
			if(sum%y) 
			{
				continue;
			}
			z=sum/y;
			memset(k,0,sizeof(k));
			if(dfs(1,0,1)) 
			{
				break;
			}
		}
		cout<<y<<endl;
	}
	return 0;
}
2023/5/30 20:05
加载中...