87分,在线求调
  • 板块P1120 小木棍
  • 楼主xy_mc
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/6/24 20:36
  • 上次更新2025/6/25 20:37:27
查看原帖
87分,在线求调
1304256
xy_mc楼主2025/6/24 20:36

rt.

T了最后一个点。

#include<bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define yes "Yes"
#define no "No"
#define debug(x) cout<<#x<<" = "<<x<<"\n"
#define rep(i,x,y) for(int i=x;i<=(y);++i)
#define per(i,x,y) for(int i=x;i>=(y);--i)

typedef long long ll;
typedef unsigned long long ull;

using namespace std;

const int INF=0x3f3f3f3f;
const ll LNF=0x3f3f3f3f3f3f3f3f;
const int N=70;

int n;
int a[N],cnt,sum,maxx,d;
bool vis[N];

void dfs(int s,int k,int st){
	if(s==0){
		dfs(d,k-1,1);
		return;
	}
	if(k==0){
		cout<<d;
		exit(0);
	}
	rep(i,st,cnt){
		if(!vis[i]&&a[i]<=s){
			vis[i]=1;
			dfs(s-a[i],k,i+1);
			vis[i]=0;
			while(i+1<=cnt&&a[i+1]==a[i]) i++;
			if(s==d||s==a[i]) break;
		}
	}
}

void solve(){
	cin>>n;
	rep(i,1,n){
		int x;
		cin>>x;
		if(x<=50){
			a[++cnt]=x;
			sum+=x;
		}
	}
	sort(a+1,a+cnt+1,greater<int>());
	for(d=a[1];(d<<1)<=sum;d++){
		if(sum%d==0){
			dfs(d,sum/d,1);			
		}
	}
	cout<<sum;
}

int main(){
	int t=1;
	while(t--){
		solve();
	}
	return 0;
}
2025/6/24 20:36
加载中...