75 pts
查看原帖
75 pts
602527
star_maelstorm楼主2023/1/14 17:48

1,2,4无输出,最后一个点tle

求助,谢谢大佬们了

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int length[maxn],book[maxn];
int n,cnt,totl;
bool dfs(int already,int last,int rest,int len)
{
	if(already==cnt+1&&rest==0) return true;
	if(already==cnt+1&&rest!=0) return false;
	if(already!=cnt+1&&rest==0)
	{
		rest=len;
		last=0;
	}
	for(int i=last+1;i<=cnt;i++)
	{
		if(!book[i])
		{
			if(rest-length[i]>=0)
			{
				book[i]=true;
				if(dfs(already+1,i,rest-length[i],len)) return true;
				book[i]=false;
				if(length[i]==rest||len==rest) break;
				while(length[i]==length[i+1]) i++;
			}
		}
	}
	return false;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int k;
		cin>>k;
		if(k<=50)
		{
			length[++cnt]=k;
			totl+=k;
		} 
	}
	sort(length+1,length+n+1);
	reverse(length+1,length+n+1);
	for(int i=length[1];i<totl;i++)
	{
		if(totl%i==0)
		{
			if(dfs(1,0,i,i))
			{
				cout<<i<<endl;
				return 0;
			}
		}
	}
	return 0;
}
2023/1/14 17:48
加载中...