AcWing 9. 分组背包问题_(JAVA)
原题链接
中等
作者:
鼠鼠我
,
2021-02-17 23:32:02
,
所有人可见
,
阅读 297
import java.util.Scanner;
//分组背包问题:多个组,一个组里面有好几个物品,但是一个组智能选择一个物品
//
//
public class 分组背包问题 {
static int N = 110;
static int n,m;
static int[][] v = new int[N][N],w = new int[N][N];
static int[] s = new int[N];
static int[] f = new int[N];
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for(int i=1;i<=n;i++)
{
s[i] = sc.nextInt();
for(int j=0;j<s[i];j++){//每个组的多个物品
v[i][j] = sc.nextInt();
w[i][j] = sc.nextInt();
}
}
for(int i=1;i<=n;i++)
{
for(int j=m;j>=0;j--)//简化版的一维数组,从大到小,v[i][k]表示大i组的第k个物品
{
for(int k=0;k<=s[i];k++)
{
if(v[i][k]<=j) f[j] = Math.max(f[j],f[j-v[i][k]]+w[i][k]);
}
}
}
System.out.println(f[m]);
}
}