57pts求调
  • 板块P1120 小木棍
  • 楼主3C17
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/10 17:49
  • 上次更新2024/10/10 20:35:24
查看原帖
57pts求调
1014585
3C17楼主2024/10/10 17:49
#include <bits/stdc++.h>
using namespace std;
int n, a[66], l, l_, used[66], m, cnt;
bool done;
void dfs(int i) {
	if (i == n) done = 1;
	for (int j = 0; j != cnt && !done; ++j) {
		if (a[i] + used[j] > l)	continue;
		used[j] += a[i];
		dfs(-~i);
		used[j] -= a[i];
		if (a[i] + used[j] == l)	return;
	}
	if (cnt == m || done)	return;
	used[cnt++] = a[i];
	dfs(-~i);
	used[--cnt] = 0;
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	for (int i = 0; i != n; ++i)
		cin >> a[i], l = a[i] > l ? a[i] : l, l_ += a[i];
	sort(a, a + n, greater<>());
	for (; l != l_; ++l) {
		if (l_ % l)	continue;
		m = l_ / l, cnt = 0;
		dfs(0);
		if (done)	break;
	}
	cout << l;
	return 0;
}
2024/10/10 17:49
加载中...