4.4学习心得
发布日期:2021-05-14 09:16:07 浏览次数:19 分类:精选文章

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

为了解决这个问题,我们需要找到Joe卖电影票所需的最短时间。Joe可以选择每次卖一张票或者两张相邻的票。我们需要使用动态规划来计算每个人的最少时间。

方法思路

  • 问题分析: Joe每次可以卖一张票或两张相邻的票。我们需要计算每个人或每对相邻人的最少时间。
  • 动态规划: 建立一个动态规划数组dp,其中dp[i]表示前i个人买票所需的最少时间。
  • 状态转移方程: 对于每个位置i,Joe有两种选择:卖一张票或者两张相邻的票。状态转移方程为: [ dp[i] = \min(dp[i-1] + \text{on}[i], dp[i-2] + \text{tw}[i-1]) ] 其中,on[i]是第i个人单独买一张票的时间,tw[i-1]是第i和第i+1个人一起买两张票的时间。
  • 时间计算: 将总时间转换为HH:MM:SS am/pm格式。
  • 解决代码

    t = int(input())
    for _ in range(t):
    k = int(input())
    on = list(map(int, input().split()))
    tw = list(map(int, input().split()))
    dp = [0] * (k + 1)
    for i in range(2, k + 1):
    option1 = dp[i-1] + on[i-1]
    option2 = dp[i-2] + tw[i-2] if i-2 >= 0 else 0
    dp[i] = min(option1, option2)
    total_seconds = dp[k]
    hours = (total_seconds // 3600) % 24
    remaining = total_seconds % 3600
    minutes = remaining // 60
    seconds = remaining % 60
    print(f"{hours:02d}:{minutes:02d}:{seconds:02d} am")

    代码解释

  • 读取输入: 读取测试用例的数量t,每个测试用例包含K个人,接着是每个人的单独买票时间和相邻两个人一起买票的时间。
  • 初始化动态规划数组: dp数组的长度为K+1,其中dp[0]=0表示不处理任何人的时间。
  • 计算最少时间: 对于每个位置i,计算两种选择的时间,取最小值存入dp[i]
  • 转换时间格式: 将总时间转换为小时、分钟和秒,并格式化输出。
  • 这个方法通过动态规划高效地解决了问题,确保了计算的最短时间。

    上一篇:4.18
    下一篇:3.28学习心得

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年05月03日 23时42分01秒