2019年3月31日C++学习
DP(动态规划)3
山东农业大学数学类4班赵景乐
DP与背包
背包问题是指在有限的资源的情况下达到最大收益的问题,若物品可分割,则可用贪心求解,若物品不可分割,则需要用到DP。
因为物品的不可分割性与资源的有限性,不能简单看出最优解,则需要用到DP的求解过程,用i-1表示i的情况,类似:
dp[i]=max(dp[i-1],dp[i-1]+a[i]);
dp[i][j]=max(dp[i-1][j],dp[i-1][j-b[j]]+a[i]);
在这里a是指收益,b是指占用的资源。
除了最基本的情况外,背包问题还有几种变式,如会产生类似:
Dp[i][j]=max(Dp[i][j],Dp[i-1][j]);
在这里Dp[i][j]自身会变化,在循环时就需要从大到小循环,否则小量改变后在计算大量时就不是用的基础数据了。其次还可以换种思路解决,比如在奇数行表示基础数据,在偶数行表示需要求出的数据,以防混淆。