已添加所有剪枝,但#26莫名TLE,还有几点WA,求教。评测记录https://www.luogu.com.cn/record/171204225
#include<bits/stdc++.h>
using namespace std;
int n,a[70],tot;
bool b[70];
priority_queue<int> op;
inline bool pd(int x,int y,int z)
{
for(int i=z;i<=n;i++)
{
if(!b[i]&&a[i]+y<=x)
{
y=y+a[i];
b[i]=true;
if(y==x)
{
return true;
}
if(pd(x,y,z+1))
{
return true;
}
y=y-a[i];
b[i]=false;
}
}
return false;
}
inline bool s(int x)
{
for(int i=1;i<=tot/x;i++)
{
if(!pd(x,0,1))
{
memset(b,false,sizeof(b));
return false;
}
}
return true;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
op.push(a[i]);
tot=tot+a[i];
}
for(int i=1;i<=n;i++)
{
a[i]=op.top();
op.pop();
}
for(int i=a[1];i<=tot;i++)
{
if(tot%i==0)
{
if(s(i))
{
cout<<i<<endl;
return 0;
}
}
}
}