DP-动态规划-排队买票

本文探讨了一种解决多人购票场景下效率优化的算法。针对不同理解方式,提供了两种求解最短购票时间的方法,包括简化理解与复杂理解。简化理解通过状态转移方程直接求解,复杂理解则涉及更多决策情况,通过五种状态转移方程进行分析。算法旨在减少排队等待时间,提高整体购票效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目 :

一场演唱会即将举行,现有n个歌迷排队买票,一人面一张票,而售票处规定,一人每次只能买一张票,假设第i位歌迷买一张票需要时间T[i](1<=i<=n),队伍中相邻的两位歌迷(第j个人和第j+1个人)也可以由其中一个人买两张票,而另一个人就可以不用排队了,则这两位歌迷买两张票的时间变为R[j],且有R[j]<T[j]+T[j+1],这样做就可以缩短后面歌迷的等待时间,加快整个售票的进程。现在给出 n ,T[j]和R[j],求使每个人都买到票的最短时间和算法。

题目解析:

首先题目有歧义:

队伍中相邻的两位歌迷(第j个人和第j+1个人)也可以由其中一个人买两张票,而另一个人就可以不用排队了

这样理解的话: 第i个人可以给 第 i+1 买 也可以给 i-1 买

 

则这两位歌迷买两张票的时间变为R[j],且有R[j]<T[j]+T[j+1]

这样理解的话:第 i 个人只能给 第i+1 个人买

 

两种的理解的有两种的解题的方式,先说简单的   第二种理解方式:

从最后一个人考虑 要么自己买,要么让前一个人代买:

设 f(i)表示 前i个 买票的最短时间,则

f(i) = min{f(i-1)+T[i],f(i-2)+R[i-1]}  (i = 2 ~ n)

 

较难理解的是第二种:第 i 个人可以给第 i-1 个人买,也可以给第 i+1 个买

从最后一个考虑:有5种情况,1,单独买,2:给前一个人买,3:给后一个人买,4:让前一个人买,5:让后一个人买

 

则:状态转移方程分5种情况:
F(I,仅买1张)=MIN{F(I-1,仅买1张),F(I-1,买2张代前一位),F(I-1,不买由前代)}+Ti
F(I,买2张代前一位)=MIN{F(I-2,仅买1张),F(I-2,买2张代前一位),F(I-2,不买由前代)}+Ri
F(I,买2张代后一位)=MIN{F(I-1,仅买1张),F(I-1,买2张代前一位),F(I-1,不买由前代)}+Ri
F(I,不买由前代)= F(I-1,买2张代后一位)
F(I,不买由后代)=MIN{ F(I-1,仅买1张),F(I-1,买2张代前一位),F(I-1,不买由前代)}

 

 

转载于:https://www.cnblogs.com/rainboy/p/3707044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值