- 小木棍
For yzz
- 2025-2-25 19:58:03 @
#include<cstdio>
#include<algorithm>
#define N 66
using namespace std;
int n,a[N],maxs,sum,nexts[N];
bool vis[N];
bool cmp(int i,int j){
return i>j;
}
bool DFS(int len,int now_len,int k,int last){
if(k*len==sum){
return true;
}
for(int i=last+1;i<=n;i++){
if(!vis[i]){
if(a[i]+now_len==len){
vis[i]=true;
if(DFS(len,0,k+1,0)){
return true;
}
vis[i]=false;
return false;
}if(a[i]+now_len<len){
vis[i]=true;
if(DFS(len,now_len+a[i],k,i)){
return true;
}
vis[i]=false;
if(!now_len){
return false;
}
}
i=nexts[i];
}
}
return false;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",a+i);
maxs=max(maxs,a[i]);
sum+=a[i];
}
sort(a+1,a+n+1,cmp);
nexts[n]=n;
for(int i=n-1;i>=1;i--){
if(a[i]==a[i+1]){
nexts[i]=nexts[i+1];
}
else{
nexts[i]=i;
}
}
for(int ans=maxs;2*ans<=sum;ans++){
if(!(sum%ans)&&DFS(ans,0,0,0)){
printf("%d",ans);
return 0;
}
}
printf("%d",sum);
return 0;
}
0 comments
No comments so far...
Information
- ID
- 345
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 9
- Tags
- # Submissions
- 268
- Accepted
- 12
- Uploaded By