社区讨论
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 条回复,欢迎继续交流。
正在加载回复...