最后一个点TLE,求调
  • 板块P1120 小木棍
  • 楼主lhs_chris
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/21 11:54
  • 上次更新2023/11/3 08:28:40
查看原帖
最后一个点TLE,求调
544007
lhs_chris楼主2023/7/21 11:54
#include<bits/stdc++.h>
#include<queue>
#include<set>
#include<stack>
#define ll long long
using namespace std;
const int N=1e5+10;
const int M=2023;
const int inf=0x3f3f3f3f;
int n,a[N],sum,num,p,v[N],len,m,maxn;
bool cmp(int a1,int a2)
{
	return a1>a2;
}
bool dfs(int d,int num,int last)
{
	if(d>p)return 1;
	if(num==len)return dfs(d+1,0,1);
	int flag=0;
	for(int i=last;i<=n;i++)
	{
		if(v[i]==0 and num+a[i]<=len and a[i]!=flag)
		{
			v[i]=1;
			if(dfs(d,num+a[i],i+1))return 1;
			v[i]=0;
			flag=a[i];
			if(num==0 or num+a[i]==len)return 0;
		}
	}
	return 0;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		if(x<=50)
		{
			a[++m]=x;
			sum+=x;
			maxn=max(maxn,a[m]);
		}
	}
	n=m;
	sort(a+1,a+n+1,cmp);
	for(len=maxn;len<=sum;len++)
	{
		if(sum%len)continue;
		memset(v,0,sizeof v);
		p=sum/len;
		if(dfs(1,0,1))
		{
			cout<<len;
			break;
		}
	}
}
2023/7/21 11:54
加载中...