请问思路哪里错了
  • 板块P1120 小木棍
  • 楼主BYR_KKK
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/30 13:24
  • 上次更新2023/11/2 16:59:56
查看原帖
请问思路哪里错了
802664
BYR_KKK楼主2023/9/30 13:24

rt,29pts,其余全wa


#include<bits/stdc++.h>
#define int long long

const int maxn=70;

int a[maxn];

std::vector<int>ji;

int b[maxn];

int n;

void dfs(int p,int k){
	if(p+1==n) {
		if(ji.size()==1) {
			std::cout<<k;
			exit(0);
		}
		for(int i=1;i<ji.size();i++) if(ji[i]!=ji[i-1]) return ;
		std::cout<<k;
		exit(0);
	}
	//k
	for(int i=0;i<ji.size();i++){
		ji[i]+=a[p+1];
		dfs(p+1,k);
		ji[i]-=a[p+1];
	}
	ji.push_back(a[p+1]);
	dfs(p+1,k);
	ji.pop_back();
}

bool cmp(int x,int y){
	return x>y;
}

signed main(){
	std::cin>>n;
	int sum=0;
	int cnt=0;
	for(int i=1;i<=n;i++){
		std::cin>>b[i];
		if(b[i]<=50) a[++cnt]=b[i],sum+=a[cnt];
	}
	n=cnt;
	std::sort(a+1,a+n+1,cmp);
	//搜索范围:a[1] ~ sum 间 所有sum的因数
	for(int i=a[1];i<=sum;i++){
		ji.clear();
		if(sum%i==0) dfs(0,i);
	}
}

2023/9/30 13:24
加载中...