差最后一个点,求调,玄关
  • 板块P1120 小木棍
  • 楼主yjjh
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/7/5 09:47
  • 上次更新2024/7/5 11:52:37
查看原帖
差最后一个点,求调,玄关
1036002
yjjh楼主2024/7/5 09:47
#include <bits/stdc++.h>
using namespace std;
vector <int> v;
int tot,cnt,book[70],n,a[70],sum;
void dfs(int already,int cur,int id){
	if(already==cnt+1){
		std::cout <<tot;
		exit(0);
	}
	int last=0;
	for(int i=id;i<=n;i++){
		if(book[i]||a[i]==last)continue;
		if(cur+a[i]<=tot){
			book[i]=1;
			last=a[i];
			if(cur+a[i]==tot){
				dfs(already+1,0,1);
				book[i]=0;
				return;
			}
			else dfs(already,cur+a[i],i+1);
			book[i]=0;
			if(cur==0)return;
		}
	}
}
bool cmp(int x,int y){
	return x>y;
}
int main(){
	std::cin >>n;
	for(int i=1;i<=n;i++){
		std::cin >>a[i];
		sum+=a[i];
	}
	sort(a+1,n+a+1,cmp);
	for(int i=1;i<=sqrt(sum);i++){
		if(sum%i==0){
			if(i>=a[i])v.push_back(i);
			if(sum/i>=a[i])v.push_back(sum/i);
			v.push_back(sum/i);
		}
	}
	sort(v.begin(),v.end());
	for(int i=0;i<v.size();i++){
		tot=v[i];
		cnt=sum/tot;
		dfs(1,0,1);
	}
	return 0;
}
2024/7/5 09:47
加载中...