3 条题解

  • 0
    @ 2024-2-1 15:27:36
    #include <iostream>
    #include<bits/stdc++.h>
    using namespace std;
    int n,a[70],cnt,x,sum,duan;
    bool v[3100];
    bool dfs(int num,int sum,int last,int x){
        if(num==duan+1){
        	cout<<x;
        	exit(0);
    	}
    	if(sum==0) return dfs(num+1,x,1,x);
    	int flag=0;
    	for(int i=last;i<=n;i++){
    		if(!v[i]&&sum>=a[i]&&flag!=a[i]){
    			v[i]=1;
    			if(dfs(num,sum-a[i],i+1,x)) return 1;
    			flag=a[i];
    			v[i]=0;
    			if(sum-a[i]==0||sum==x) return 0;
    		}
    	}
    	
    	return 0;
    }
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
        	cin>>x;
        	if(x<=50){
        		a[++cnt]=x;
        		sum+=x;
    		}
    	}
    	n=cnt;
    	sort(a+1,a+n+1,greater<int>());
    	for(int i=a[1] ;i<=sum;i++){
    		if(sum%i) continue;
    		duan=sum/i;
    		if(dfs(1,i,1,i)){
    			cout<<i;
    			break;
    		}
    	}
    }
    

    信息

    ID
    2528
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    184
    已通过
    20
    上传者