资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
有一個背包,容量為M。有N種物品,每種物品有其體積Wi與價值Vi。將這些物品的一部分放入背包,每種物品可以放任意多個,要求總體積不超過容量,且總價值最大。
输入格式
第一行為N, M。
之後N行,每行為Wi, Vi。
输出格式
一個數,為最大價值。
样例输入
3 20
15 16
6 6
7 5
样例输出
18
数据规模和约定
N, M<=1000。
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int nums = scanner.nextInt();
int MaxRoL = scanner.nextInt();
int[][] arr = new int[nums][2];
for (int i = 0; i < nums; i++) {
for (int j = 0; j < 2; j++) {
arr[i][j] = scanner.nextInt();
}
}
int n= arr.length;
int m=MaxRoL;
int dp[][]=new int[n+1][m+1];
for (int i = 0; i <= n; i++) {
dp[i][0]=0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if(j>=arr[i-1][0]){
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-arr[i-1][0]]+arr[i-1][1]);
}
else {
dp[i][j]=dp[i-1][j];
}
}
}
System.out.println(dp[n][m]);
}
}