57pts TLE 求调
查看原帖
57pts TLE 求调
1013142
Chizuru_Ichinose楼主2024/7/27 00:16
#include <bits/stdc++.h>
#define maxn 70
using namespace std;
using ll = long long;
ll n,a[maxn],sum;
bool v[maxn];
ll val,tot,len;
inline bool dfs(ll stick,ll cab,ll last)
{
	if(stick>tot) return true;
	if(cab == len) return dfs(stick+1,0,1);
	int fail = 0;
	for(int i = last;i<=n;i++)
	{
		if(!v[i] && cab+a[i]<=len && fail!=a[i])
		{
			v[i] = 1;
			if(dfs(stick,cab+a[i],i+1)) return true;
			v[i] = 0;
			fail = a[i];
			if(cab == 0 && cab+a[i]==len) return false;

		}
	}
	return false;
}
int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
int main() {
// 	freopen("input.txt","r",stdin);
// 	freopen("output.txt","w",stdout);
	n = read();
	for(int i = 1;i<=n;i++)
	{
		a[i] = read();
		sum+=a[i]; 
		val = max(val,a[i]);
	}
	sort(a+1,a+1+n);
	reverse(a+1,a+1+n);
	for(len = val;len<=sum;len++)
	{
		if(sum%len!=0) continue;
		tot = sum/len;
		memset(v,0,sizeof(v));
		if(dfs(1,0,1)) break;
	}
	cout<<len<<endl;
	return 0;
}
2024/7/27 00:16
加载中...