题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String str = in.nextLine();
String[] strings = str.split(" ");
int Max_money = Integer.parseInt(strings[0]);
int Max_count = Integer.parseInt(strings[1]);
int[][] ss = new int[Max_count+1][5];
for (int i = 1; i <= Max_count; i++) {
String shop = in.nextLine();
String[] shop1 = shop.split(" ");
ss[i][0] = Integer.parseInt(shop1[0]);
ss[i][1] = Integer.parseInt(shop1[1]) * Integer.parseInt(shop1[0]);
ss[i][2] = Integer.parseInt(shop1[2]);
int pan = ss[i][2];
if (pan != 0) {
if (ss[pan][3] == 0) ss[pan][3] = i;
else ss[pan][4] = i;
}
}
int[][] dp = new int[Max_count + 1][Max_money + 1];
for (int i = 1; i <= Max_count; i++) {
int v = ss[i][0];
int p = ss[i][1];
int q = ss[i][2];
int f1 = ss[i][3];
int f2 = ss[i][4];
for (int j = 1; j <= Max_money; j++) {
dp[i][j] = dp[i - 1][j];
if (q != 0) continue;
if (j >= v) {
dp[i][j] = Math.max(dp[i][j],
p + dp[i - 1][j - v]);
if (f1 != 0 && j>=v+ss[f1][0]) dp[i][j] = Math.max(dp[i][j],
p + ss[f1][1] + dp[i - 1][j - v - ss[f1][0]]);
if (f2 != 0 && j>=v+ss[f2][0]) dp[i][j] = Math.max(dp[i][j], p + ss[f2][1] + dp[i - 1][j - v - ss[f2][0]]);
if(f2 != 0 && j>=v+ss[f1][0]+ss[f2][0]) dp[i][j] = Math.max(dp[i][j],
p + ss[f1][1] + ss[f2][1] + dp[i - 1][j - v - ss[f1][0] - ss[f2][0]]);
}
}
}
System.out.println(dp[Max_count][Max_money]);
}
}
}

