Leetcode. 375.猜数字大小 II
375. 猜数字大小 II
解题思路:
动态规划的题目,太久没做类似的了没找到合适的思路,后面查看题解后发现能以dp[i][j]表示猜由i到j数的最小现金数。(可以将题目类比为背包,最小金额–最大价值,货物种类&&背包容量–猜数范围)
- 递推式子在每次确定范围后为max(dp[k+1][j],dp[i][k-1]),因为要保证确保获胜,所以要取max。
- 当dp[i][i]时,不用支付现金,因此dp[i][i]=0
- 外层i确定每次遍历左边界,外层j确定每次遍历右边界,因为初始化时已经让dp中所有元素都为0,所以外层遍历直接保证i!=j即可,无需重复赋值0
- 根据范围遍历范围内所有可能的猜数情况,根据递推式求出各个情况的保证获胜的最小金额数,将其最小值赋值给dp[i][j]
以下为C++代码:
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风之歌!
评论