社区讨论

TLE 30 救助

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhjhbbin
此快照首次捕获于
2025/11/04 02:34
4 个月前
此快照最后确认于
2025/11/04 02:34
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=67;
int a[N];
bool vis[N];
bool cmp(int x,int y){return x>y;}
int cnt,sum,n,len1;
 
bool dfs(int u,int len,int start){
    if(u==cnt)return true;
    if(len==len1)return dfs(u+1,0,1);
    int fail=0;
    for(int i=start;i<=n;i++){
        if(vis[i]||a[i]==fail||len+a[i]>len1)continue;
        vis[i]=true;
        if(dfs(u,len+a[i],i+1))return true;
        vis[i]=false;
        fail=a[i];
        if(len==0)return false;
        if(len+a[i]==len1)return false;
    }
    return false;
}
 
int main(){
    scanf("%d",&n);
	sum=0;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum+=a[i];
    sort(a+1,a+1+n,cmp);
    for(int L=a[1];L<=sum;L++){
        if(sum%L!=0)continue;
        cnt=sum/L;
        len1=L;
        memset(vis,0,sizeof(vis));
		if(dfs(0,0,1)){
            printf("%d\n",L);
            return 0;
        }
    }
    return 0;
}

回复

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

正在加载回复...