度小满笔试第二题

第一题的测试样例有点弱。直接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])



#度小满##笔试题目#
全部评论

相关推荐

点赞 评论 收藏
分享
03-12 15:34
已编辑
北京邮电大学 Java
呓语0613:老哥你这黑马点评改造是在哪里看的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务