AcWing 5071. 负载均衡
原题链接
简单
作者:
三鹤亥一
,
2025-04-01 16:45:57
· 山东
,
所有人可见
,
阅读 1
import sys
sys.setrecursionlimit(1000000)
N = 210
w = [0] * N
cnt = 0
m = 0
d = float('inf')
def getd():
"""计算当前石子堆的最大值与最小值之差"""
max_val = max(w[:cnt])
min_val = min(w[:cnt])
return max_val - min_val
def dfs():
global m, d, cnt
current_diff = getd()
if cnt > m:
m = cnt
d = current_diff
elif cnt == m:
if current_diff < d:
d = current_diff
if cnt == 1:
a = w[0]
for x in range(a // 3 + 1, a // 2 + 1):
w[0] = x
w[cnt] = a - x
cnt += 1
dfs()
w[0] = a
cnt -= 1
else:
i, j = 0, -1
for k in range(1, cnt):
if w[k] >= w[i]:
j = i
i = k
elif j == -1 or w[k] > w[j]:
j = k
a, b = w[i], w[j] if j != -1 else 0
if a > b:
for x in range(max(b // 2, a // 3) + 1, a // 2 + 1):
w[i] = x
w[cnt] = a - x
cnt += 1
dfs()
w[i] = a
cnt -= 1
else:
return
n = int(input())
w[cnt] = n
cnt += 1
dfs()
print(m, d)