有没有dalao帮忙看看,已经调了一个下午了QAQ
#include<bits/stdc++.h>
using namespace std;
const int N=70;
int n,ans,mx,sum;
int a[N],b[N];
int ds,ml;
bool dfs(int cnt,int cur,int lst){
if(cnt>=ds){
printf("%d",ml);
exit(0);
}
if(cur==ml) return dfs(cnt+1,0,0);
int f=0;
for(int i=lst+1;i<=n;++i){
if(b[i]) continue;
if(a[i]==f) continue;
if(cur+a[i]>ml) continue;
b[i]=1;
if(dfs(cnt,cur+a[i],i)) return 1;
b[i]=0;
f=a[i];
if(cur==0||cur+a[i]==ml) return 0;
}
return 0;
}
inline bool cmp(int a,int b){return a>b;}
signed main(){
//ios::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]),mx=max(mx,a[i]),sum+=a[i];
sort(a+1,a+1+n,cmp);
for(int i=mx;i<=sum;++i){
if(sum%i) continue;
ds=sum/i,ml=i;
if(dfs(1,0,0)) break;
}
return 0;
}