0分求调
  • 板块P1120 小木棍
  • 楼主weis
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/1/18 09:56
  • 上次更新2025/1/18 13:14:56
查看原帖
0分求调
1512725
weis楼主2025/1/18 09:56
#include<bits/stdc++.h>
using namespace std;
int n,a[70],b[70],sum,len,flag;
bool yu;
bool cmp(int x,int y){
    return x>y;
}
void dfs(int k,int last,int rest){
    if(k==sum/len){
        yu=1;
        return;
    }
    if(!rest){
        int i;
        for(i=2;i<=n;i++)
        	if(b[i]==0) break;
        b[i]=1;
        dfs(k+1,i,len-a[i]);
        b[i]=0;	
        if(yu) return;
    }
	for(int i=last+1;i<=n;i++){
        if(!b[i]&&rest>=a[i]){
            b[i]=1;
            dfs(k,i,len-a[i]);
            b[i]=0;
            int j=i;
            while(i<n&&a[j]==a[i]) i++;
        }
        
    }
}
int main() {
	cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    sort(a+1,a+1+n,cmp);
    for(int i=a[1];i<=sum;i++)
        if(sum%i==0){
            len=i;
            dfs(1,1,len-a[1]);
            if(yu==1){
                cout<<len;
                return 0;
            }
        }
    return 0;
}
2025/1/18 09:56
加载中...