不知道哪里错了样例都过不了,各种解法都看了,感觉都大同小异,求大佬帮忙看下,忽略50以上的的问题还没加,关键现在样例过不去
#include <bits/stdc++.h>
using namespace std;
const int N=100;
int n,cnt,a[N],v[N],sum,len,val;
bool dfs(int stick,int cab,int last){
if(stick*len==sum){
return 1;
}
if(cab==len)dfs(stick+1,0,1);
for(int i=last;i<=n;i++){
if(!v[i]&&cab+a[i]<=len){
v[i]=1;
if(dfs(stick,cab+a[i],i+1))return 1;
v[i]=0;
}
if(cab==0||cab+a[i]==len)return 0;
int j=i;
while(j<=n&&a[j]==a[i])j++;
i=j-1;
}
return 0;
}
int main(){
while(cin>>n&&n){
sum=0;
memset(v,0,sizeof v);
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
val=max(a[i],val);
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
for(len=val;len<=sum;len++){
if(sum%len)continue;
if(dfs(1,0,1)){
cout<<len;
return 0;
}
}
}
return 0;
}