关注
第二题蒙了一会,题主代码肯是对的,但总感觉自己不太踏实,后来索性证明一下~
--------------------------------------
直觉是动态规划, 子问题拆解碰到问题:
从第N层到第i层, 方式只可能有三条:
1)先到第i-1层, 再上一层, 即d[i-1]+1
2)先到i+1层, 再下一层, 即d[i+1]+1
3)如果i是偶数, 还可能是从i/2层坐电梯上来, 即d[i/2]+1
但这样d[i]依赖d[i+1]无法使用动态规划(d为最短路径函数)
下面证明方式2中到i+1层的方式一定是坐电梯直接到的, 否则一定不是最短路径:
要到i+1层同样只有三种方式:
1)从第i层上来, 不可能
快递员要到i层, 因此不可能是从i层走上来的, 除非傻了
2)从坐电梯到第i+1+k层走下来, 注意下楼只有一种方式, 一定是一路走下来
2.1)如果i为偶数, k定为奇数, 总路程s1为: d[(i+1+k)/2]+1+(k+1)
到第i/2层的最短路径一定小于等于先到d[i/2+(k+1)/2]再下楼到i/2层, 因为这是其中的一条路径
即, d[i/2] <= d[i/2+(k+1)/2] + (k+1)/2
因此先到i/2层再坐电梯到i层的路程s2有:
s2 = d[i/2]+1 <= d[i/2+(k+1)/2]+1+(k+1)/2 <d[(i+1+k)/2]+1+(k+1) = s1
所以此时s1一定不是最短路径
2.2)如果i为奇数, k一定为偶数, 总路程s1为: d[(i+1+k)/2]+1+(k+1)
到(i+1)/2层的最短路径一定小于等于其中的一条: 到(i+1)/2+k/2层然后再走下楼
即: d[(i+1)/2] <= d[(i+1)/2+k/2]+k/2
因此因此先到(i+1)/2层再坐电梯到i+1层再到第i层的路程s2有:
s2 = d[(i+1)/2] + 1 + 1 <= d[(i+1)/2+k/2]+k/2+1+1 <= d[(i+1+k)/2]+1+(k+1)=s1
当且仅当k=0时等号成立
2.3)综上, 最短路径中, 到i+1层然后下楼到i层只有一种情况, 即先坐电梯到i+1层然后走下来
查看原帖
点赞 1
相关推荐
牛客热帖
更多
正在热议
更多
# 牛客树洞,我想对你说 #
21012次浏览 139人参与
# 选择和努力,哪个更重要? #
111047次浏览 846人参与
# 快手技术岗信息交流阵地 #
9000次浏览 63人参与
# 大学最后一个寒假,我想…… #
56375次浏览 617人参与
# 哪些公司校招卡第一学历 #
215701次浏览 770人参与
# 求职中的尴尬瞬间 #
8520次浏览 67人参与
# 应届生被毁约被毁意向了怎么办 #
48775次浏览 282人参与
# 除了主业以外,你还有哪些其他收入? #
32879次浏览 299人参与
# 牛客周边新品开箱 #
12429次浏览 91人参与
# 牛友的志愿填报指南 #
37388次浏览 189人参与
# 25届非技术实习投递记录 #
132997次浏览 993人参与
# 如何KTV领导 #
74907次浏览 509人参与
# 为什么国企只招应届生 #
209782次浏览 1241人参与
# 硬件人的春招flag #
53706次浏览 435人参与
# 怎么给家人解释你的工作? #
16586次浏览 96人参与
# 机械人避雷的岗位/公司 #
30991次浏览 250人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
138624次浏览 886人参与
# 你最近一次加班是什么时候? #
94877次浏览 516人参与
# 得物app工作体验 #
30959次浏览 69人参与
# 国企还是互联网,你怎么选? #
173609次浏览 1318人参与
# 一句话证明你还在找工作 #
8411次浏览 89人参与
OPPO公司福利 1047人发布