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背包问题的主要内容,如果未能解决你的问题,请参考以下文章