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一模一样,就是多考虑了值。
实现:
空间优化,可以用一个一维数组来做。
这里第二层循环需要从大到小。dp[j-A[i-1]]其实是用的优化之前上一行的:dp[i-1][j-A[i-1]]。如果从小到大,dp[j-A[i-1]]就会被更新,结果就会出错。
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]]就会被更新,结果就会出错。
评论
发表评论