P10429 [蓝桥杯 2024 省 B] 拔河 题解
思路
通过动态规划计算出所有连续子序列的力量值之和,并将其存储在一个数组中然后排序,遍历一遍数组,找到相邻两个力量值之和的差的绝对值的最小值,然后输出这个答案就行了。
时间复杂度大概是
来个 python 的代码
def min_power_diff(n, a):# 计算所有连续子序列的力量值之和
prefix_sum = [0] * (n + 1)
for i in range(1, n + 1):
prefix_sum[i] = prefix_sum[i - 1] + a[i - 1]
# 计算差值并排序
diffs = []
for i in range(1, n + 1):
for j in range(i, n + 1):
diff = abs(prefix_sum[j] - prefix_sum[i - 1])
diffs.append(diff)
diffs.sort()
# 找到相邻两个力量值之和的差的最小值
min_diff = float('inf')
for i in range(1, len(diffs)):
min_diff = min(min_diff, diffs[i] - diffs[i - 1])
return min_diff
n = int(input())
a = list(map(int, input().split()))
# 输出答案
result = min_power_diff(n, a)
print(result)
本文作者:BadBadBad__AK
本文链接:https://www.cnblogs.com/BadBadBad/p/18180225/P10429
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步