0-1背包

01背包

http://www.nowcoder.com/questionTerminal/2820ea076d144b30806e72de5e5d4bbf

0-1背包

已知一个背包最多能容纳物体的体积为V

现有n个物品第i个物品的体积为v_i,第i个物品的重量为w_i

求当前背包最多能装多大重量的物品

解析

​ dp[j]表示背包体积为j的情况下,能装的最大容量是多少。由于这是0-1背包问题,一个物品只能使用一次,所以采用一维的状态转移数组时,在内循环遍历背包容量时,要采用逆序,避免同一件物品被重复使用。

public int knapsack (int V, int n, int[][] vw) {
    // write code here

    int[] dp = new int[V + 1];
    dp[0] = 0;

    for (int i = 0; i < n; i++) {
        for (int j = V; j >= vw[i][0]; j--) {

            if (j >= vw[i][0]){

                dp[j] = Math.max(dp[j],dp[j - vw[i][0]] + vw[i][1]);
            }
        }
    }
    return dp[V];
}
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
9
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务