3 条题解

  • 0
    @ 2024-2-1 15:31:05

    #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(numduan+1){ cout<<x; exit(0); } if(sum0) 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||sumx) 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; } } }

    • 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;
      		}
      	}
      }
      
      • 0

        #include<iostream> #include<bits/stdc++.h> const int N=1145; using namespace std; int n,a[N],cnt,x,sum,duan; bool v[3748]; bool dfs(int num,int sum,int last,int x){ if(numduan+1){ cout<<x; exit(0); } if(sum0) 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||sumx)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; } } return 0; }

        • 1

        信息

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