D. Riverside Curio
发布日期:2021-05-08 03:35:25 浏览次数:32 分类:精选文章

本文共 731 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要计算每天在河边标记的最小总和。每天的水位变化会影响标记的位置和数量,我们需要找到最优的标记位置,使得在水位下方的标记数最少。

方法思路

  • 正向遍历:从第一天开始,计算每一天的总标记数 t_i。如果当前天数的标记数比前一天多,则更新总标记数;否则,总标记数保持不变。
  • 反向遍历:从最后一天开始,调整前几天的总标记数,使得相邻两天的标记数差不超过1。
  • 计算最小总和:根据每一天的总标记数和当前天数的标记数,计算每天在水位下方的标记数,累加得到最小总和。
  • 解决代码

    n = int(input())m = list(map(int, input().split()))t = [0] * nt[0] = m[0] + 1for i in range(1, n):    t[i] = max(t[i-1], m[i] + 1)for i in range(n-2, -1, -1):    if t[i+1] - t[i] > 1:        t[i] = t[i+1] - 1ans = sum(t[i] - m[i] - 1 for i in range(n))print(ans)

    代码解释

  • 读取输入:读取天数 n 和每天的标记数数组 m
  • 初始化标记数数组 t:第一个天数的标记数为 m[0] + 1,因为第一天总是有一个标记。
  • 正向遍历:从第二天开始,计算每一天的总标记数,确保总标记数不少于前一天的标记数。
  • 反向调整:从倒数第二天开始,调整前几天的标记数,使得相邻两天的标记数差不超过1。
  • 计算最小总和:累加每天在水位下方的标记数,输出最小总和。
  • 通过这种方法,我们能够高效地找到最优的标记位置,确保每天在水位下方的标记数最少。

    上一篇:加法和乘法
    下一篇:Win10 JDK配置环境变量以及为什么需要配置每部分的原因

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月18日 23时18分12秒