• DP-动态规划-排队买票


    题目 :

    一场演唱会即将举行,现有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,不买由前代)}
  • 相关阅读:
    每天问自己十个问题
    FreeBSD入门安装及汉化
    商人的10条赚钱规则
    端口扫描程序nmap使用手册
    canvas
    表单2.0
    H5数据保存之storage
    Linux基础命令2
    Linux文件权限与修改
    Linux基础命令1
  • 原文地址:https://www.cnblogs.com/rainboy/p/3707044.html
Copyright © 2020-2023  润新知