求求QWQ
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int N=80;
int a[N];
bool f[N];
int n,len,slen;
bool dfs(int cnt,int sum,int idx){
if(cnt*len==slen){
return true;
}
if(sum==len){
return dfs(cnt+1,0,1);
}
int fail=0;
for(int i=idx;i<=n;i++)
{
if(f[i]||sum+a[i]>len||a[i]==fail){
continue;
}
f[i]=true;
if(dfs(cnt,sum+a[i],i+1)){
return true;
}
f[i]=false;
fail=a[i];
if(sum==0||sum+a[i]==len) return false;
}
return false;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
slen+=a[i];
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
for(len=a[1];len<=slen;len++){
if(slen%len==0 &&dfs(0,0,1)){
cout<<len;
break;
}
}
return 0;
}