AcWing 8. 二维费用的背包问题
原题链接
中等
作者:
玛卡巴卡呀
,
2021-05-29 21:34:40
,
所有人可见
,
阅读 372
题目描述
java代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static int N=1010,V=110,M=110;
public static int f[][]=new int [V][M];
public static int v[]=new int [N];
public static int w[]=new int [N];
public static int m[]=new int [N];
public static int n,vv,mm;
public static BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String [] p=bufferedReader.readLine().split(" ");
n=Integer.parseInt(p[0]);
vv=Integer.parseInt(p[1]);
mm=Integer.parseInt(p[2]);
for(int i=1;i<=n;i++) {
p=bufferedReader.readLine().split(" ");
v[i]=Integer.parseInt(p[0]);
w[i]=Integer.parseInt(p[1]);
m[i]=Integer.parseInt(p[2]);
}
for(int i=1;i<=n;i++) {
for(int j=vv;j>=0;j--) {
for(int k=mm;k>=0;k--) {
//每一次都需要进行判断只有当j k符合条件的时候才可以,否则数组会出现负数的情况
if(j>=v[i] && k>=w[i]) {
f[j][k]=Math.max(f[j][k], f[j-v[i]][k-w[i]]+m[i]);
}
/*f[i][j][k]=f[i-1][j][k];
if(j>=v[i] && k>=w[i]) {
f[i][j][k]=Math.max(f[i-1][j][k], f[i-1][j-v[i]][k-w[i]]+m[i]);
}*/
}
}
}
System.out.println(f[vv][mm]);
}
}