全部RE求助
  • 板块P1120 小木棍
  • 楼主708151_qwq
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/7/28 13:12
  • 上次更新2023/10/27 18:02:26
查看原帖
全部RE求助
708151
708151_qwq楼主2022/7/28 13:12
#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
int a[N], len, cnt, v[N], n;
bool cmp(int x, int y) {
	if(x>y)
		return true;
	else
		return false;
}
bool dfs(int stick, int cur, int last) {
	if(stick>cnt)
		return true;
	if(cur==len)
		return dfs(stick+1, 0, 1);
	int fail = 0;
	for(int i=last; i<=n; i++) {
		if(!v[i] && cur+a[i]<=len && fail!=a[i]) {
			v[i] = 1;
			if(dfs(stick, cur+a[i], i+1))
				return true;
			fail = a[i];
			v[i] = 0;
			if(cur==0 || cur+a[i]==len)
				return false;
		}
	}
	return false;
}
int main() {
	int sum = 0;
	int val = 0;
	for(int i=1; i<=n; i++) {
		scanf("%d", &a[i]);
		sum += a[i];
		val = max(val, a[i]);
	}
	sort(a+1, a+n+1, cmp);
	for(len=val; len<=sum; len++) {
		if(sum%len)
			continue;
		cnt = sum/len;
		memset(v, 0, sizeof v);
		if(dfs(1, 0, 1))
			break;
	}
	cout << len << endl;
	return 0;
}
2022/7/28 13:12
加载中...