有一天,在电梯里,很多人,大家纷纷按了自己想去的楼层
因为电梯一个劲地停,我就想去4楼的能不能在3楼就下,这样在4楼就能少停一次,他们可以走楼梯,牺牲一点个人利益换取集体利益最大化
我想,每个人在电梯里都这么想过

今天将这个问题仔细思考,形式化了一下,发现是一道动态规划问题,解决起来也是十分优美

N层楼,从0到N-1层,给定数组a[N]表示每层楼要下多少人,每个人爬一层楼花费M秒,电梯爬一层楼需要K秒,电梯每停一次花费P秒,问电梯如何停靠才能使得大家等待的总时间尽量短?

import randomN = 16  # N层楼,0~(N-1)层
a = [random.randint(0, 4) for _ in range(N)]  # 每层楼有多少个人下电梯
M = 3  # 人爬一层楼需要的时间
K = 1  # 电梯爬一层楼需要的时间
P = 2  # 电梯停一次需要的时间
f = [[0] * N for _ in range(N)]
desc = [['' for __ in range(N)] for _ in range(N)]
for i in range(N):for j in range(i + 1, N):f[i][j] = sum(a[i + 1:]) * (j - i) * K + sum(a[j + 1:]) * Pdesc[i][j] = '=' * 20desc[i][j] += '\n{}人从{}楼到{}楼因为电梯运行等了{}秒'.format(sum(a[i + 1:]), i, j, sum(a[i + 1:]) * (j - i) * K)desc[i][j] += '\n{}人因为电梯在{}楼停了一次等了{}秒'.format(sum(a[j + 1:]), j, sum(a[j + 1:]) * P)for k in range(i + 1, j):f[i][j] += min(k - i, j - k) * M * a[k]if a[k] > 0:desc[i][j] += '\n{}人从{}楼下电梯去往{}楼因为走楼梯花费{}秒'.format(a[k], i if k - i < j - k else j, k,min(k - i, j - k) * M * a[k])
g = [(0xfffffff, 0)] * N
g[0] = (0, 0)
for i in range(N):for j in range(i):if g[i][0] > g[j][0] + f[j][i]:g[i] = (g[j][0] + f[j][i], j)
print(g[N - 1])
stop = []
x = N - 1
while x:stop.append(x)x = g[x][1]
stop.append(0)
stop = stop[::-1]
print('每层人数', a)
print('停电梯楼层号', stop)
for i in range(1, len(stop)):print(desc[stop[i - 1]][stop[i]])

运行结果

(334, 14)
每层人数 [1, 1, 1, 0, 3, 1, 3, 0, 3, 0, 2, 2, 1, 2, 2, 2]
停电梯楼层号 [0, 6, 8, 11, 13, 14, 15]
====================
23人从0楼到6楼因为电梯运行等了138秒
14人因为电梯在6楼停了一次等了28秒
1人从0楼下电梯去往1楼因为走楼梯花费3秒
1人从0楼下电梯去往2楼因为走楼梯花费6秒
3人从6楼下电梯去往4楼因为走楼梯花费18秒
1人从6楼下电梯去往5楼因为走楼梯花费3秒
====================
14人从6楼到8楼因为电梯运行等了28秒
11人因为电梯在8楼停了一次等了22秒
====================
11人从8楼到11楼因为电梯运行等了33秒
7人因为电梯在11楼停了一次等了14秒
2人从11楼下电梯去往10楼因为走楼梯花费6秒
====================
7人从11楼到13楼因为电梯运行等了14秒
4人因为电梯在13楼停了一次等了8秒
1人从13楼下电梯去往12楼因为走楼梯花费3秒
====================
4人从13楼到14楼因为电梯运行等了4秒
2人因为电梯在14楼停了一次等了4秒
====================
2人从14楼到15楼因为电梯运行等了2秒
0人因为电梯在15楼停了一次等了0秒

电梯停靠问题---------------给你出道题相关推荐

  1. 电梯停靠问题CPP实现

    假设某人要乘坐电梯,从楼层 到楼层 ,若电梯停靠位置 在 之间,则电梯移动距离为. 若停靠位置在 ,则电梯要多移动 2 距离.若停靠位置在 ,则电梯要多移动 4 距离.我们可 以发现,停靠位置从 到 ...

  2. 给你出道题---如何蒙题

    人生处处都是选择,考试也是这样. 不论是单选题.多选题.还是判断题,最终都可以归结为单选题.因为对了就是全对,错了就是全错,不存在对一部分的情况. 判断题可以看做选项只有2个的单选题,多选题比如选项有 ...

  3. 给你出道题:依次去掉离中心最远的M个点

    给定一个数组a[N],里面包含N个向量.现在要求进行删点操作,删点原则如下: 1.求出N个向量的中心O1,删除离O1最远的那个点 2.求出N-1个向量的中心O2,删除O2最远的那个点 ...... 重 ...

  4. 赛事丨出道题就能赢万元奖金?华录杯大赛告诉你,是真的

    生活中遇到不便利的时候,你是否想过用大数据来解决大家的需求?算法中遇到了困难,你想不想让大家一起帮你推进下去? 终于,你能得到了一个完美的问题解决方案, 但这还不算完,想不想顺便再获得一大笔奖金? 华 ...

  5. php 电梯程序设计,教你写出京东电梯式轮播

    效果知识点:企业布局技巧,如何高效的编写CSS样式,常用选择器,基本标签,盒子模型,jquery类库调用,JS特效编写,JS编程思维等. 京东电梯式轮播源码: Document *{margin:0p ...

  6. 最小方差问题---------------给你出道题

    很多首诗,每首诗中包含很多字.我当然要用倒排索引了,对每个字建立索引,形式如下: 字1 诗11 诗12 诗13 字2 诗21 诗22 ...... 用户查询的是一个诗句,我把这个诗句中的每个字都摘出来 ...

  7. 折正方体-------------给你出道题

    一个正方体盒子,把它展开成平面,有多少种展开方法? 给定一个平面(由若干个小正方形组成),问这个平面能否折成正方体? 下面给出更清晰的定义: 给定一个6×6的方格图,每个方格标识0,1表示是否选择这个 ...

  8. 有向有权图的电阻------给你出道题

    有向图包括无向图,无向图是特殊的有向图(无向图中一条无向边相当于有向图中两条有向边). 无权图是特殊的有权图(无权图相当于将有权图各条边的权值视作相等). 给定有向图图G,指明N个起始节点,M个终止结 ...

  9. 给你出道题---最佳组合问题

    给定N组数字,每组数字组内数字之间互不相同,组间数字可能相同.这些数字都是正整数,现在从这N组数字中选择尽量多的数字,使得选出来的数字满足以下条件: 每组只选出一个数字 选出来的数字互不相同 要求:使 ...

最新文章

  1. R语言数据结构之数组
  2. 单个正态总体均值的区间估计_考研数学闭关修炼习题讲解(3536)统计、估计与检验...
  3. Razor master page
  4. lucene大牛博客汇总保存
  5. 产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析
  6. el-option传两个值_如意芳霏三对CP三种甜,傅容与徐晋夫唱妇随,甜蜜值爆棚
  7. Linux开源字体——“文泉驿正黑”的安装命令
  8. iphone6出信号 无服务器,苹果6手机无服务(非常见故障点)维修
  9. 免费的WinCC语音报警控件
  10. Google Play镜像站
  11. Extjs实现角色权限流控制,对fieldset,checkbox的动态控制
  12. php trim /r/n,「php中trim函数使用」- 海风纷飞Blog
  13. 微信公众号、小程序和企业微信申请流程
  14. 忘记电脑开机密码怎么办?六种方法教你解决
  15. python制作图表放入excel_python写入excel(xlswriter)--生成图表
  16. Android M App Permissions
  17. i6mA-DNC:基于深度学习的二核苷酸表示预测水稻基因组DNA n6 -甲基腺苷位点
  18. 英菲克无线鼠标pm6的配对方法
  19. 【算法】最长递增子序列问题
  20. Qt 设置合适的字体大小

热门文章

  1. WPF设置全局字体和字体嵌入
  2. JMeter记录篇2——性能测试基础(2)
  3. SQL Server遍历表(临时表)
  4. $ is not defined 如何解决
  5. Macbook Pro 光驱坏 安装windows
  6. Netscape Navigator 9 Beta 1 颁布
  7. 唯真才能永久--读《十年》
  8. sql sum()对空值的处理
  9. python 报ImportError: Install xlrd = 1.0.0 for Excel support错误出现及其解决帮法
  10. Kafka核心源码解析 - KafkaController源码解析