背包九讲

(1) 0-1背包问题

图片说明
题目链接:https://www.acwing.com/problem/content/2/

思路:动态规划求解

  • 变量
    • dp[i][j] 记录前i个物品在体积为j的情况下的最大价值
    • v[i]:第i个物品的体积
    • w[i]:第i个物品的价值
  • 状态方程
    • 选第i个物品:dp[i][j] = dp[i-1][j-v[i]] + w[i]
    • 不选第i个物品:dp[i][j] = dp[i-1][j]

代码如下:

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in );



        int n = in.nextInt();
        int m = in.nextInt();

        //int[][] dp = new int[n+1][m+1];

        int[] dp = new int[m+1];

        int[] w = new int[n+1];
        int[] v = new int[n+1];

        for(int i = 1;i<=n;i++){

            v[i] = in.nextInt();
            w[i] = in.nextInt();
        }

        for(int i = 1;i<=n;i++){
            for(int j = m;j>=v[i];j--){
//                dp[i][j] = dp[i-1][j];
//                if(j >= v[i]){
//                    dp[i][j] = Math.max(dp[i][j],dp[i-1][j - v[i]] + w[i]);
//                }
                dp[j] = Math.max(dp[j],dp[j-v[i]] + w[i]);
            }
        }

        System.out.println(dp[m]);
    }

}

(2)完全背包问题

题目跟先前的一样,只是增加了每一个物品可以多选的条件。

全部评论

相关推荐

04-04 10:56
门头沟学院 Java
点赞 评论 收藏
分享
人生一梦:24年我投暑期实习,它以我不是女的为理由拒绝了我查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务