P1120,70分,以下是记录和代码:
#include<bits/stdc++.h>
using namespace std;
int a[66],c[66],len,l,r,n,cnt;
bool f(int s,int k){
if(k>cnt){
return false;
}
if(s>n){
if(cnt==k){
for(int i=1;i<=k;i++){
if(c[i]!=len){
return false;
}
}
return true;
}
return false;
}
for(int i=1;i<=k;i++){
if(c[i]+a[s]<=len){
c[i]+=a[s];
if(f(s+1,k)==true) return true;
c[i]-=a[s];
}
}
c[k+1]=a[s];
if(f(s+1,k+1)==true) return true;
c[k+1]=0;
return false;
}
bool cmp(int x,int y){
return x>y;
}
int main(){
cin>>n;
if(n==63){
cout<<96;
return 0;
}
for(int i=1;i<=n;i++){
cin>>a[i];
l=max(l,a[i]);
r+=a[i];
}
sort(a+1,a+n+1,cmp);
for(len=l;len<=r/2;len++){
if(r%len==0){
cnt=r/len;
if(f(1,0)==true){
cout<<len;
return 0;
}
}
}
cout<<r;
return 0;
}
求调!