博客
关于我
NOIp2005 过河
阅读量:792 次
发布时间:2023-02-16

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

为了解决这个问题,我们需要找到青蛙过河最少需要踩到的石子数。青蛙每次跳跃的距离在给定的范围内,桥上有一些石头,我们需要计算青蛙过河时必须踩到的石头的最小数量。

方法思路

  • 问题分析:青蛙从桥的一端跳到另一端,每次跳跃的距离在S到T之间。我们需要找到最少需要踩到的石子数。
  • 动态规划:使用动态规划来解决这个问题。定义dp[i]表示到达位置i时,已经踩到的石子数的最小值。
  • 预处理:将石头的位置排序,并使用二分查找来快速计算区间内的石头数目。
  • 状态转移:对于每个位置i,遍历所有可能的跳跃距离d,更新dp[i]的值。
  • 解决代码

    import bisect
    L = int(input())
    S, T, M = map(int, input().split())
    stones = list(map(int, input().split()))
    stones.sort()
    n = len(stones)
    INF = float('inf')
    dp = [INF] * (L + 1)
    dp[0] = 0
    for i in range(L + 1):
    if dp[i] == INF:
    continue
    for d in range(S, T + 1):
    j = i - d
    if j < 0:
    continue
    if j > L:
    continue
    if j >= L:
    if dp[j] < dp[i]:
    dp[i] = dp[j]
    else:
    if i >= L:
    count = 0
    else:
    left = bisect.bisect_left(stones, j + 1)
    right = bisect.bisect_right(stones, i - 1)
    count = right - left
    if dp[j] + count < dp[i]:
    dp[i] = dp[j] + count
    print(dp[L])

    代码解释

  • 输入处理:读取桥的长度L,跳跃距离范围S和T,石头数量M以及石头的位置。
  • 排序石头位置:将石头的位置排序以便后续二分查找。
  • 动态规划数组初始化:dp数组初始化为无穷大,dp[0]表示青蛙从起点出发没有踩到任何石头。
  • 遍历每个位置:对于每个位置i,遍历所有可能的跳跃距离d,计算跳跃后的位置j。
  • 计算石头数目:使用二分查找计算从j+1到i-1之间的石头数目,如果i超过桥的终点,则石头数目为0。
  • 更新动态规划数组:根据计算出的石头数目,更新dp[i]的值,记录最小石头数目。
  • 通过这种方法,我们可以高效地找到青蛙过河最少需要踩到的石头数目。

    转载地址:http://iojfk.baihongyu.com/

    你可能感兴趣的文章
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NIO笔记---上
    查看>>
    NIO蔚来 面试——IP地址你了解多少?
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    NISP国家信息安全水平考试,收藏这一篇就够了
    查看>>
    NIS服务器的配置过程
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NiuShop开源商城系统 SQL注入漏洞复现
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 模型中的偏差和公平性检测
    查看>>
    Vue3.0 性能提升主要是通过哪几方面体现的?
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>