码迷,mamicode.com
首页 > 其他好文 > 详细

2018微软实习笔试一道dp题目总结

时间:2018-04-08 14:36:31      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:.com   滚动数组   维数   ref   数组   答案   加油   问题   post   

题意大概是说在一维数轴上起点和终点的距离是d,现在我们要从起点走到终点。每走一个单位长度消耗一个单位能量,初始时有K单位能量。同时在起点和终点之间分布一些加油站a1,a2,...an,给你加油站数量、位置以及每个加油站储油量,问你要走到终点,至少需要停在几个加油站加油。

类似于http://www.cnblogs.com/wangyiming/p/7193446.html这道题,直接用dp求解“到达一定距离至少停下来几次”的原问题并不方便,于是转换思路,采用一种“对偶”的方式求解“停下来固定次数能到达的最远距离”。定义状态dp[i][j]表示到前i个加油站为止,停了j个加油站能到达的最远距离,那么dp[i][j] = max(dp[i - 1][j - 1] + a[i], dp[i - 1][j])。最终在所有满足dp[n][j] >= d的j中,最小的一个就是答案。

这样做时间复杂度是O(n2)的,空间复杂度通过滚动数组可以压缩到O(n)。不知是否可以进一步优化。

dp问题在直接求解遇到困难的时候,不妨试试这样的思路。

 

2018微软实习笔试一道dp题目总结

标签:.com   滚动数组   维数   ref   数组   答案   加油   问题   post   

原文地址:https://www.cnblogs.com/wangyiming/p/8744388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!