
4.4学习心得
问题分析: Joe每次可以卖一张票或两张相邻的票。我们需要计算每个人或每对相邻人的最少时间。 动态规划: 建立一个动态规划数组 状态转移方程: 对于每个位置i,Joe有两种选择:卖一张票或者两张相邻的票。状态转移方程为: [ dp[i] = \min(dp[i-1] + \text{on}[i], dp[i-2] + \text{tw}[i-1]) ] 其中, 时间计算: 将总时间转换为HH:MM:SS am/pm格式。 读取输入: 读取测试用例的数量t,每个测试用例包含K个人,接着是每个人的单独买票时间和相邻两个人一起买票的时间。 初始化动态规划数组: 计算最少时间: 对于每个位置i,计算两种选择的时间,取最小值存入 转换时间格式: 将总时间转换为小时、分钟和秒,并格式化输出。
发布日期:2021-05-14 09:16:07
浏览次数:19
分类:精选文章
本文共 1119 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到Joe卖电影票所需的最短时间。Joe可以选择每次卖一张票或者两张相邻的票。我们需要使用动态规划来计算每个人的最少时间。
方法思路
dp
,其中dp[i]
表示前i个人买票所需的最少时间。on[i]
是第i个人单独买一张票的时间,tw[i-1]
是第i和第i+1个人一起买两张票的时间。解决代码
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")
代码解释
dp
数组的长度为K+1,其中dp[0]=0
表示不处理任何人的时间。dp[i]
。这个方法通过动态规划高效地解决了问题,确保了计算的最短时间。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月03日 23时42分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux运行C语言文件
2019-03-11
C字符串高级
2019-03-11
C语言_动态内存分配练习
2019-03-11
Linux学习_系统进程概念
2019-03-11
七层网络模型(待添加)
2019-03-11
考研复试——KY276 Problem C
2019-03-11
老鸟带你画tiled lines
2019-03-11
MybatisPlus自定义Sql实现多表查询
2019-03-12
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
2019-03-12
PyQt5快速上手基础篇10-QSettings用法
2019-03-12
JQuery--手风琴,留言板
2019-03-12
MFC 自定义消息发送字符串
2019-03-12
goahead 下goaction测试与搭建
2019-03-12
Adding Powers
2019-03-12
ideal 下创建springboot项目
2019-03-12
Linux操作系统的安装与使用
2019-03-12
ajax请求出现/[object%20Object]错误的解决办法
2019-03-12
流体运动估计光流算法研究
2019-03-12
如何转载博客
2019-03-12
C++ 继承 详解
2019-03-12