动态规划
enjoy_code_
这个作者很懒,什么都没留下…
展开
-
最少钱币数(动态规划)
最少钱币数问题也可以看作多重背包问题。此问题递推公式(也可以叫做动态转移方程):(注:money[i]表示可以使用的纸币的面额组成的数组,dp[m]表示要凑m元至少需要多少张纸币。)dp[m] = min( dp[ m-money[i] ]+1 , dp[m] )我们先了解一下DP(Dynamic Programing)的基本原理:首先,找到某个状态的最优解,然后在它的帮助下,找到下一个状态的最优解。不明白这个概念没关系,我们以下面的例子为例来分析一下——如果我们有4种面值分别为1元,3元,5元原创 2020-11-13 11:05:47 · 2544 阅读 · 1 评论 -
1025. 除数博弈
解题思路:如果我们想要知道当数字N时爱丽丝赢,就要看N-x时的情况,当N-x爱丽丝赢时,则N时爱丽丝输(相当于N时爱丽丝选X,由于N-x是鲍勃先手选所以必赢),反之,当N-x时爱丽丝输,则N时爱丽丝必赢。(因为鲍勃,爱丽丝都是最佳状态)由于我们知道2爱丽丝赢,3爱丽丝输,则我们就可以由2.3推N-x,N,即状态转移方程:(初始化dp数组为false)if(N % x == 0 && dp[N-x] == false){ dp[N] = true; break;//(由于鲍勃,爱..原创 2020-11-06 11:05:31 · 73 阅读 · 0 评论 -
面试题 17.16. 按摩师 (动态规划easy)
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。class Solution {public: int massage(vector<int>& nums) { //leetcode老是出这种边界情况,一定要注意。 if(nums.size()==0){ retu原创 2020-11-06 10:41:57 · 270 阅读 · 0 评论