69TLE求助
查看原帖
69TLE求助
173864
NaN_HQJ2007_NaN楼主2021/3/31 21:18
#include <bits/stdc++.h>
using namespace std;

const int N = 65 + 5;
int tn, n, a[N], sum = 0, cx, b[N], flag = 0;
bool cmp(int x, int y) {
	return x > y;
}
bool dfs(int g, int c, int l) { //g¸ùÊý, c³¤¶È, lÉÏÒ»´ÎµÄ×ø±ê 
	if (g == 0 && c == cx) return true;
	for (int i = l + 1; i <= n; ++i) {
		int t = INT_MAX;
		if (b[i] == 1 || a[i] == t) continue;
		if (a[i] < c) {
			b[i] = 1;
			if (dfs(g, c - a[i], i)) {
				b[i] = 0;
				return true;
			}
			b[i] = 0;
			t = a[i];
			if (c == cx || c == a[i]) {
				return false;
			}
		} else if (a[i] == c) {
			b[i] = 1;
			if (dfs(g - 1, cx, 0)) {
				b[i] = 0;
				return true;
			}
			b[i] = 0;
			t = a[i];
			if (c == cx || c == a[i]) {
				return false;
			}
		}
	}
	return false;
}

int main() {
	scanf("%d", &tn);
	for (int i = 1; i <= tn; ++i) {
		int t;
		scanf("%d", &t);
		if (t <= 50) {
			a[++n] = t;
			sum += t;
		}
	}	
	sort(a + 1, a + n + 1, cmp);
	for (int i = a[1]; i <= sum; ++i) {
		flag = 0;
		if (sum % i == 0) {
			cx = i;
			if (dfs(sum / i, i, 0)) {
				printf("%d\n", i);
				break;
			}
		}
	}
	return 0;
}
2021/3/31 21:18
加载中...