动态规划的代码好优雅,看着是一种享受

发布人:zzk · 发布于 2026年8月13日 13:55

https://atcoder.jp/contests/abc438/tasks/abc438_d 代码实现起来不难, 就是想着太难了,初始化和动态规划转移方程暂且不论,这道题为什么要动规呀?Why,就这道题,我的反应肯定是数学建模,然后前缀和+减小自由量, 这个思考是可以的,也AC了。但感觉不如动规来的直观优雅。 但是到底为什么要动规呀,所以说动态规划很难学,思维曲线是陡的,只能说,算法直觉? ``` python import math import sys def main(): n = int(sys.stdin.readline().strip()) arr = list(map(int, sys.stdin.readline().strip().split())) brr = list(map(int, sys.stdin.readline().strip().split())) crr = list(map(int, sys.stdin.readline().strip().split())) dp = [ [-math.inf] * 3 for _ in range(n + 1)] # 第一个元素必须是a dp[1][0] = arr[0] for i in range(1, n): a = arr[i] b = brr[i] c = crr[i] idx = i + 1 # 保持拿a dp[idx][0] = a + dp[idx - 1][0] # 拿b,刚开始拿b b2 = b + dp[idx - 1][0] # 拿b,持续拿b b1 = b + dp[idx - 1][1] dp[idx][1] = max(b1, b2) # 拿c, 刚开始拿c c1 = c + dp[idx - 1][1] # 拿c, 持续拿c c2 = c + dp[idx - 1][2] dp[idx][2] = max(c1, c2) print(dp[n][2]) if __name__ == "__main__": main() ```
返回公开近况