社区讨论

玄关求助,最后一个点TLE

P1120[CERC 1995] 小木棍参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi1vbt5l
此快照首次捕获于
2025/11/16 23:26
4 个月前
此快照最后确认于
2025/11/18 10:33
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n,x,mx=-1,tot=0;
vector<int>a;
vector<bool>b;

bool dfs(int cnt,int s,int len,int p){
	if(cnt==0) return true;
	if(len==s) return dfs(cnt-1,s,0,0);
	
	int last=-1;
	for(int i=p;i<a.size();i++){
		if(a[i]==last||b[i]==true) continue;
		
		if(len+a[i]>s) continue;
		b[i]=true;
		//cout<<len+a[i]<<" "<<s<<'\n';
		if(dfs(cnt,s,len+a[i],(len+a[i]==s?0:i+1))) return true;
		b[i]=false;
		last=a[i];
		if(len==0)	break;
		if(len+a[i]==s) break;
		
	}
	return false;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x;
		a.push_back(x);
		mx=max(mx,x);
		tot+=x;
	} 
	sort(a.rbegin(),a.rend());
	b.resize(a.size());
	
	for(int i=mx;i<=tot;i++){
		if(tot%i==0){	
			fill(b.begin(),b.end(),false);
			if(dfs(tot/i,i,0,0)){
				cout<<i<<'\n';
				return 0;
			}
		}
	}
	return 0; 
}

回复

0 条回复,欢迎继续交流。

正在加载回复...