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;
}