代码随想录算法训练营第四十二天|1049. 最后一块石头的重量II|494. 目标和|474.一和零

一、1049. 最后一块石头的重量II

思路:首先明确这题是要两堆石头碰撞,那样剩余的石头就更少。然后明确这题是尽可能的往背包装,装不满也没事。明确这两点以后,就可以用之间的思想来做了。一个数就是一个物品,它的值既是它的重量也是它的价值。

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量II|494. 目标和|474.一和零_第1张图片

二、494. 目标和

思想:首先明确这是01背包的问题,但是这题和以前又不一样,不一样的地方在于dp[j]的含义,以前的dp[j]是容量为j的背包能够最多装多少价值的物品。这里dp[j]是你装满容量为j的背包有多少种方法,然后是确定递归公式,其实我注释的递归公式是错的,当时就是理解错了dp[j]可以由dp[j-nums[i]]得出,因为你每装一个物品背包容量就会变成j-num[i],装满这个背包会有dp[j-nums[i]]种方法,所以dp[j]为所有情况的总和,然后对于初始化这里可能不好理解,就是dp[0]=1,但是不用纠结。

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量II|494. 目标和|474.一和零_第2张图片

 三、474.一和零

思想:这题其实比最开始做的01背包问题多了一个维度,就是多了一个重量,以前只需要考虑一个重量限制条件,而这里需要考虑两个限制条件,所以自己第一遍做的时候,并没有想到什么思路去同时处理这两个限制条件,然后递归公式没有推出来,看了解析发现处理又让人苦笑不得,整体的思路都是背包能够装多少的问题,关键在于处理两个重量,就是两个限制条件的递归公式,就是通过一个限制重量的递归公式推过来的。

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量II|494. 目标和|474.一和零_第3张图片

 

 

你可能感兴趣的:(动态规划,算法)