社区讨论

求优化,悬小号一关

P1120[CERC 1995] 小木棍参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlrni952
此快照首次捕获于
2026/02/18 14:28
22 小时前
此快照最后确认于
2026/02/19 11:16
59 分钟前
查看原帖
按照深入浅出上面写的。
57 TLE Record
CPP
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 70;

int n, s, now;
int a[MAXN], pre[MAXN], len[MAXN];

void dfs(int rel, int rea, int mina){
	if(rel == 0){ // 5
		dfs(now, rea - 1, a[n]);
		return;
	}
	if(rea == 0){
		printf("%d", now);
		exit(0);
	}
	mina = min(mina, rel);
	while(mina && len[mina] == 0)
		-- mina;
	while(mina){
		if(len[mina]){
			-- len[mina];
			dfs(rel - mina, rea, mina);
			++ len[mina];
			if(rel == rea || rel == mina) // 6
				return;
		}
		mina = pre[mina]; // 3
	}
}

signed main(){
	
	scanf("%d", &n);
	
	for(int i = 1; i <= n; ++ i)
		scanf("%d", &a[i]), s += a[i], ++ len[a[i]];
	
	sort(a + 1, a + n + 1); // 4
	
	for(int i = 1; i <= n; ++ i)
		if(a[i] != a[i - 1])
			pre[a[i]] = a[i - 1];
	
	for(now = a[n]; now <= s / 2; ++ now) // 2
		if(s % now == 0) // 1
			dfs(now, s / now, a[n]);
	
	printf("%d", s);
	
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...