79分其他WA,一本通的思路,哪里有问题?
  • 板块P1120 小木棍
  • 楼主qinziao
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/14 22:04
  • 上次更新2024/6/15 10:16:40
查看原帖
79分其他WA,一本通的思路,哪里有问题?
591458
qinziao楼主2024/6/14 22:04
#include<bits/stdc++.h>
using namespace std;
int n,a[70],minn,sum,len,m;
bool used[70],bj;
void dfs(int zu,int last,int rest){
	int i;
	if(zu==m) {
	bj=1;
		return ;
	}
	if(rest==0){
		for(i=1;i<=n;i++){
			if(!used[i]) {
				used[i]=1;break;
			}	
		}
		dfs(zu+1,i,len-a[i]);
		if(bj==1) return ;
	}
	else{
		int l=last+1,r=n,mid;
		while(l<=r){
			mid=l+r>>1;
			if(a[mid]<=rest) r=mid-1;
			else l=mid+1;
		}
		for(i=r;i<=n;i++){
			if(!used[i] and 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++){ 
	int x;cin>>x;
	if (x > 50) {n--;
		i--;
		continue;
		}
		else{a[i]=x;
		}
	minn=max(a[i],minn);
	sum+=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);
			used[1]=1;
			len=i,m=sum/i,bj=0;
			dfs(1,1,len-a[1]);
			if(bj==1){cout<<i<<"\n";
			break;
			} 
		}
	}
	return 0;
}
2024/6/14 22:04
加载中...