因为是很久之前的代码,思路都忘了,但是求改。
#include<bits/stdc++.h>
using namespace std;
int n,a[101],cnt,k;
bool v[101];
bool asd(int x,int l,int now,int sum){
if(sum==12){
printf("%d %d\n",x,l);
}
if(l==sum){
if(x==k/sum){
return 1;
}
return asd(x+1,0,0,sum);
}
int la=0;
for(int i=now+1;i<=n;i++){
if(v[i]==0&&l+a[i]<=sum&&a[i]!=la){
v[i]=1;
cnt+=a[i];
if(asd(x,l+a[i],a[i],sum)){
return 1;
}
cnt-=a[i];
la=a[i];
v[i]=0;
if(l==0||l+a[i]==sum){
return 0;
}
}
}
return 0;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
scanf("%d",&n);
int sum=0,maxx=-0x3f3f3f3f;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]<=50){
sum+=a[i];
}
maxx=max(maxx,a[i]);
}
k=sum;
sort(a+1,a+n+1,cmp);
for(int i=maxx;i<=sum;i++){
if(sum%i!=0){
continue;
}
// printf("%d\n",i);
if(asd(1,0,0,i)){
printf("%d",i);
return 0;
}
}
printf("%d",sum);
return 0;
}