Backpack II

思路:
state: dp[i][j],前i个石头,填满体积为j,所获得的最大值。
transition: dp[i][j]=Max(dp[i-1][j-A[i-1]]+V[i-1],dp[i-1][j]), 思维方式和backpack一模一样,就是多考虑了值。

实现:
空间优化,可以用一个一维数组来做。

  for(int i=1;i<=A.length;i++)
        {
            for(int j=m;j>=A[i-1];j--)
            {
             dp[j]=Math.max(dp[j-A[i-1]]+V[i-1],dp[j]);
            }
        }

这里第二层循环需要从大到小。dp[j-A[i-1]]其实是用的优化之前上一行的:dp[i-1][j-A[i-1]]。如果从小到大,dp[j-A[i-1]]就会被更新,结果就会出错。

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array