小红书4.9第二题多重背包记录
第一次做这种背包,看来是我见识少了,当场没做出来,事后做的,不知道能A多少。有没有大佬看看这样解还有啥问题吗
背包可选的物品需要不断更新,使用不断更新的dp数组作为物品。如果对应数组索引值不为0,就表示这个容量的瓶子是可用的。
public static int getValue(int[] p1,int[] p2,int x,int target){ int[] dp = new int[target + 1]; //base case for (int i = 0; i < p1.length; i++) { dp[p1[i]] = Math.max(dp[p1[i]], p2[i]); } //dp for (int t = 1; t <= target; t++) { for (int i = 1; i <= t; i++) { if(t-i==0 || (dp[i]!=0 && dp[t-i]!=0)) { dp[t] = Math.max(dp[t], dp[i] + dp[t - i] + ((t - i == i) ? x : 0)); } } } return dp[target]; }#笔试复盘#