0-1背包问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0-1背包问题相关的知识,希望对你有一定的参考价值。

问题描述:
现有n件物品和一个容量为c的背包。第i件物品的重量是重量为w[i],价值是v[i]。已知对于一件物品必须选择取(用1表示)或者不取(用0表示),且每件物品只能被取一次(这就是“0-1”的含义)。求放置哪些物品进背包,可使这些物品的重量总和不超过背包容量,且价值总和最大。

代码:

import java.util.Scanner;

/**

  • author:wangxue
  • date:2020/7/23
    */
    // 0-1 背包问题
    // https://www.cnblogs.com/skying555/p/11119488.html
    public class Solution1 {
    public static int zeroAndOneBag(int[] weights,int[] values,int capacity){
    int[][] dp=new int[weights.length+1][capacity+1];
    for(int i=1;i<dp.length;i++){
    for(int j=1;j<dp[0].length;j++){
    if(j>=weights[i-1]) {
    dp[i][j] = Math.max(values[i-1]+dp[i-1][j-weights[i-1]],dp[i-1][j]);
    }else{
    dp[i][j]=dp[i-1][j];
    }
    }
    }
    return dp[weights.length][capacity];
    }
    public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int capacity=scanner.nextInt();
    int goods=scanner.nextInt();
    int[] weights=new int[goods];
    int[] values=new int[goods];
    for(int i=0;i<goods;i++){
    weights[i]=scanner.nextInt();
    values[i]=scanner.nextInt();
    }
    System.out.println(zeroAndOneBag(weights,values,capacity));
    }
    }

以上是关于0-1背包问题的主要内容,如果未能解决你的问题,请参考以下文章

C++ 算法主题系列之集结0-1背包问题的所有求解方案

动态规划-多重背包问题

背包问题(0-1背包+完全背包)

0-1背包问题 —— 四种解法解题

背包问题之0-1背包

背包0-1背包与完全背包一维数组实现