社区讨论

87分,最后一个点274ms,能想到的优化都想到了,求大佬指点

P1120[CERC 1995] 小木棍参与者 5已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lo282swz
此快照首次捕获于
2023/10/23 09:32
2 年前
此快照最后确认于
2023/11/03 09:46
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
const int MAXN = 101;
using namespace std;
int a[MAXN],vis[MAXN],n;
bool cmp(int a,int b){
    return a>b;
}
bool dfs(int dep,int step,int sum,int l){
    if(sum==0&&dep==n+1){
    	return true;
	}
    else if(dep==n+1){
    	return false;
	}
	else if(sum==0){
    	step=0;
        sum=l;
    }
    for(int i=step+1;i<=n;i++){
        if(!vis[i]){
            if(sum-a[i]>=0){
                vis[i]=true;
                if(dfs(dep+1,i,sum-a[i],l)){
                	return true;
				}
                vis[i]=false;
                if(l==sum||a[i]==sum){
                	break;
				}
                while(a[i]==a[i+1]){
                	++i;
				}    
            }
        }
    }
    return 0;
}
int main(){
	int sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
    	scanf("%d",&a[i]);
        sum+=a[i];
    }
    sort(a+1,a+n+1,cmp);
    for(int i=a[1];i<=sum;++i){
        if(sum%i==0){
            if(dfs(1,0,i,i)){
                printf("%d\n",i);
                return 0;
            }
        }
    }
    return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...