小木棍极简思路79分,来看一看吧
  • 板块P1120 小木棍
  • 楼主qinziao
  • 当前回复6
  • 已保存回复7
  • 发布时间2024/6/25 20:55
  • 上次更新2024/6/26 09:58:55
查看原帖
小木棍极简思路79分,来看一看吧
591458
qinziao楼主2024/6/25 20:55
#include<bits/stdc++.h>
using namespace std;
int n,a[71],used[71],sum,minn,len,m;
bool bj;
void dfs(int zu,int last,int rest){
	if(zu==m) {
		bj=1;
		return ;
	}
	for(int i=last+1;i<=n;i++){
		if(!used[i]){
			if(rest==a[i]){
				used[i]=1;
				dfs(zu+1,1,len);
				if(bj==1) return;
			}
			if(rest>a[i]){
				used[i]=1;
				dfs(zu,i,rest-a[i]);
				if(bj==1) return;
				used[i]=0;
				while(i<n and a[i]==a[i+1]) i++;
			}
		}
	}
}
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+1+n,greater<int>());

	for(int i=minn;i<=sum;i++){
		if(sum%i==0){
			fill(used+1,used+1+n,0);			
			len=i,bj=0,m=sum/i;
			dfs(1,1,len-a[1]);
			if(bj) {
				cout<<i<<"\n";
				return 0;
			}
		}
	}
	return 0;
}
2024/6/25 20:55
加载中...