二位费用就是相比一维费用又多了个费用罢了。比如说我们在一维时只考虑物品的体积,根据背包的最大容积来装物品。而二维费用我们要考虑背包的体积和背包的最大载重量了。在这里我们根据空间优化,仿照一维的背包来写二维背包,去掉第一层。
import java.awt.FontFormatException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
int a=Integer.parseInt(aStrings[0]);
int b=Integer.parseInt(aStrings[1]);
int c=Integer.parseInt(aStrings[2]);
int[][] dp=new int[b+1][c+1];
int d;
for(d=1;d<=a;d++) {
String[] bStrings=br1.readLine().split(" ");
int e=Integer.parseInt(bStrings[0]);
int f=Integer.parseInt(bStrings[1]);
int g=Integer.parseInt(bStrings[2]);
for(int h=b;h>=e;h--) {
for(int i=c;i>=f;i--) {
dp[h][i]=Math.max(dp[h][i], dp[h-e][i-f]+g);
}
}
}
System.out.println(dp[b][c]);
}
}