1 条题解

  • 1
    @ 2025-3-30 8:41:22
    #include <bits/stdc++.h>
    using namespace std;
    
    int n,cnt[100];
    int m;
    int a[100];
    int sl,sc;
    int flag=0;
    int sum,maxx;
    
    void dfs(int l,int c,int p){
    	if(flag==1){
    		return;
    	}
    	if(c==sc){
    		flag=1;
    		return;
    	}
    	for(int i=p;i<=m;i++){
    		if(cnt[a[i]]>0){
    			if(l+a[i]<=sl){
    				if(l+a[i]==sl){
    					cnt[a[i]]--;
    					dfs(0,c+1,1);
    					cnt[a[i]]++;
    				}
    				else{
    					cnt[a[i]]--;
    					dfs(l+a[i],c,i);
    					cnt[a[i]]++;
    				}
    			}
    			if(l+a[i]==sl){ 
    				return; 
    			}
    			if(l==0){ 
    				return;
    			}
    		}
    	} 
    }
    
    
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		int tmp;
    		cin>>tmp;
    		if(tmp>50){
    			continue;
    		}
    		sum+=tmp;
    		maxx=max(maxx,tmp);
    		if(cnt[tmp]==0){
    			m++;
    			a[m]=tmp;
    			cnt[tmp]++; 
    		}
    		else{
    			cnt[tmp]++;
    		}
    	}
    	sort(a+1,a+m+1,greater<int>());
    	for(int i=maxx;i<=sum;i++){
    		if(sum%i==0){
    			sc=sum/i;
    			sl=i;
    			dfs(0,0,1);
    			if(flag==1){
    				cout<<i;
    				return 0;
    			} 
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    148
    时间
    260ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者