39分求调
查看原帖
39分求调
1600864
luozhihao123楼主2025/1/18 09:56

39分求调

#include<bits/stdc++.h>
using namespace std;
int n,a[100],b[100],ma,s,flag,i;
bool cmp(int x,int y){
    return x>y;
}
void dfs(int k,int last,int rest){
    if(k==s/i){
        flag=1;return;
    }
    if(!rest){
        int j;
      	for(j=2;j<=n;j++){
            if(!b[i])break;
        }
        b[j]=1;
        dfs(k+1,j,i-a[j]);
        b[i]=0;
        if(flag)return;
    }
    for(int j=last+1;j<=n;j++){
        if(!b[j]&&rest>=a[j]){
            b[j]=1;
            dfs(k+1,j,rest-a[j]);
            b[j]=0;
            int k=j;
            while(j<n&&a[k]==a[j])j++;
        }
    }
}
int main() {
	cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];s+=a[i],ma=max(ma,a[i]);
    }sort(a+1,a+n+1,cmp);
    for(i=a[1];i<=s;i++){
        if(s%i==0){
            dfs(1,1,i-a[i]);
            if(flag){
                cout<<i;break;
            }
        }
    }
    return 0;
}
2025/1/18 09:56
加载中...