P1120 求助

题目总版

```cpp #include<bits/stdc++.h> using namespace std; int n,a[65],cnt=0,len=0,minn=0,sum=0,visit[65]; bool cmp(int x,int y){ return x>y; } bool dfs(int ok,int now,int k){ if(ok>cnt) return true; if(now==len) return dfs(ok+1,0,1); int rongyu=-1; for(int i=k;i<=n;i++){ if(now+a[i]<=len&&visit[i]==0&&rongyu!=a[i]){ visit[i]=1; if(dfs(ok,now+a[i],i+1)==true) return true; rongyu=a[i]; visit[i]=0; if(now+a[i]==len) break; if(now==0) break; } } return false; } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; minn=max(minn,a[i]); } sort(a+1,a+n+1,cmp); for(len=minn;len<=sum/2;len++){ if(sum%len!=0){ continue; } cnt=sum/len; if(dfs(1,0,1)==true){ cout<<len; return 0; } } cout<<sum; return 0; } ```
by EXC_X @ 2022-07-16 08:11:08


|