TLE54分悬关
  • 板块P1120 小木棍
  • 楼主wst000
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/8/30 18:47
  • 上次更新2025/8/30 20:24:20
查看原帖
TLE54分悬关
1288198
wst000楼主2025/8/30 18:47
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef const ll cll;
typedef vector<ll>vll;
typedef string str;
typedef pair<ll, ll>pll;
#define pb push_back
#define st first
#define nd second
cll llmi = -9187201950435737472;
cll llma =  9187201950435737471;
ll n,m,a[65],cnt[55],ma,mi=llma,s;
void dfs(ll x,ll y,ll z,ll k){
	if(s/k==x)printf("%lld",k),exit(0);
	if(z==k){
		dfs(x+1,ma,0,k);
		return ;
	}
	for(int i=min(y,k-z);i>=mi;i--){
		if(cnt[i]==0||z+i>k)continue;
		else {
			cnt[i]--;
			dfs(x,i,z+i,k);
			cnt[i]++;
			if(z+i==k||z*2==k)return;
		}
	}
}
int main() {
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		ma=max(ma,a[i]);
		cnt[a[i]]++;
		mi=min(mi,a[i]);
		s+=a[i];
	}
	for(int i=mi;i*2<=s;i++)
		if(s%i==0)dfs(0,ma,0,i);
	printf("%lld",s);
	return 0;
}
2025/8/30 18:47
加载中...