最后一个点TLE,求调
查看原帖
最后一个点TLE,求调
1118521
__Confringo__楼主2025/1/5 08:38
#include <bits/stdc++.h>
using namespace std;

int n,l,a[114],uu[114],sum,s;
inline int read(){
    int x=0; bool f=1; char c=getchar();
    for(;!isdigit(c);c = getchar()) if (c == '-') f = 0;
    for(;isdigit(c);c = getchar()) x = (x<<3) + (x<<1) + c - '0';
    if (f) return x;
    return -x;
}
bool dfs(int now,int c,int la){
	if (now > s) return true;
	if (c == l) return dfs(now+1,0,1);
    int f = 0;
	for (int i = la;i <= n;i++){
		if (uu[i] || c + a[i] > l || f == a[i]) continue;
		uu[i] = 1;
		if (dfs(now,c+a[i],i+1)) return true;
        f = a[i];
		uu[i] = 0;
		if (c == 0) return false;
		if (c + a[i] == l) return false;
	}
    return false;
}
bool cmp(int x,int y){
    return x > y;
}

int main()
{
	n = read();
	for (int i = 1;i <= n;i++){
		a[i] = read();
		sum += a[i];
	}
	sort(a+1,a+n+1,cmp);
	for (l = a[1];l <= sum;l++){
		if (sum % l) continue;
		s = sum / l;
        for (int i = 1;i <= n;i++) uu[i] = 0;
		if (dfs(1,0,1)) break;
	}
    cout << l << endl;
	
    pause;
	return 0;
}
2025/1/5 08:38
加载中...