度小满笔试第二题
第一题的测试样例有点弱。直接print(9*(n-a+1)*(m-b+1))过了。
第二题暴力dp超时。过了18,不太清楚这道题能不能dp做。大佬们可以帮忙看看有什么问题吗,最后5分钟没来的及改成java,不知道java能不能过。
哭了,只能偷鸡。
N, A, B, C = map(int, input().split())
arr = list(map(int, input().split()))
# 到点i的最短的花费
dp = [float('inf')] * (N + 1)
# 起始点
dp[1] = 0
for i in range(N):
# 直接到达某城市
dp[arr[i]] = min(dp[arr[i]], A)
# 从该点可以到达的城市,减少到该点后一个城市
for k in range(i + 2, arr[i]):
dp[k] = min(dp[k], (arr[i] - k) * B + A + dp[i + 1])
# 从该点可以到达的城市,计算到第N个城市
for k in range(arr[i] + 1, N + 1):
dp[k] = min(dp[k], (k - arr[i]) * C + A + dp[i + 1])
print(dp[N]) 
