中级农民
- 积分
- 113
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-2-6
- 最后登录
- 1970-1-1
|
刷题打卡第1天
312. Burst Balloons 非常难的一道dp题,关键是正确定义状态和递归函数,dp[i][j]指的是区间[i,j]中能获得的最大金币数,self.dp[left][right] = max(self.dp[left][right],self.dfs(left,k-1)+self.nums[left-1]*self.nums[k]*self.nums[right+1]+self.dfs(k+1,right)),其中k是这个区间中被打爆的最后一个气球,他是他本身的分数加上左段加右段的分数之和。此题有递归比用循环更能理解一些。
322. Coin Change 背包型dp题,因为只需要返回数量,且每个硬币可以使用多次,不需要2D dp数组,一维即可满足所有要求。注意初始化,和通过初值是否被reset来判断当前情况是否有解。
518. Coin Change 2 经典knapsack问题,因为需要区分每个硬币的使用情况,所有需要2D dp数组,dp[i][j]表示使用1-i种硬币,最多有几种方法使得状态达到j.初始化也有小技巧,只要初始化左上角dp[0][0]=1即可。另外背包问题基本不需要对原始数组进行排序。
|
|