小红书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];
    }

#笔试复盘#
全部评论
没问题 应该可以过
点赞
送花
回复
分享
发布于 2023-04-09 19:27 上海

相关推荐

点赞 评论 收藏
转发
点赞 7 评论
分享
牛客网
牛客企业服务