大佬帮我看看
#include<bits/stdc++.h>
using namespace std;
int stick[67],sum,vis[67],n;
bool cmp(int x,int y){
return x>y;
}
bool dfs(int id,int len,int tar){
if(stick[id]>tar){
return false;
}
int taj=tar-stick[id],mark=0;
if(taj==0) return true;
for(int i=id+1;i<=n;i++){
if(stick[i]<=taj&&(vis[i]==0&&stick[i]!=mark)){
vis[i]=1;
if(dfs(i,len,taj)){
return true;
}
vis[i]=0;
mark=stick[i];
}
}
return false;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&stick[i]);
sum+=stick[i];
}
sort(stick+1,stick+n+1,cmp);
for(int i=stick[1];i<=sum;i++){
if(sum%i!=0) continue;
for(int j=1;j<=n;j++) vis[j]=0;
int flag=1;
for(int j=1;j<=n;j++){
if(vis[j]==1){
continue;
}
if(!dfs(j,i,i)){
flag=0;
break;
}
}
if(flag==0) continue;
printf("%d",i);
break;
}
return 0;
}