题解 | 购物单
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int totalMoney = sc.nextInt() / 10, n = sc.nextInt();
Good[] goods = new Good[n + 1];
for(int i = 1; i <= n; i++){
int price = sc.nextInt() / 10;
int importance = sc.nextInt();
int id = sc.nextInt();
goods[i] = new Good(price, importance, id);
}
for(int i = 1; i <= n; i++){
int id = goods[i].id;
if(id > 0){
if(goods[id].id1 == 0){
goods[id].setId1(i);
}else{
goods[id].setId2(i);
}
}
}
// for(int i = 1; i <= n; i++){
// System.out.println(goods[i].price + " " + goods[i].importance + " " + goods[i].id + " " + goods[i].id1 + " " + goods[i].id2);
// }
int[][] f = new int[n + 1][totalMoney + 1];
for(int i = 1; i <= n; i++){
int price = goods[i].price;
int price1 = 0, price2 = 0, price3 = 0;
int x = goods[i].importance * price;
int y = 0, z = 0, k = 0;
if(goods[i].id1 != 0){
price1 = goods[goods[i].id1].price + price;
y = x + goods[goods[i].id1].price * goods[goods[i].id1].importance;
}
if(goods[i].id2 != 0){
price2 = goods[goods[i].id2].price + price;
z = x + goods[goods[i].id2].price * goods[goods[i].id2].importance;
}
if(goods[i].id1 != 0 && goods[i].id2 != 0){
price3 = price1 + price2 - price;
k = y + z - x;
}
for(int j = 1; j <= totalMoney; j++){
f[i][j] = f[i - 1][j];
if(goods[i].id == 0) {
f[i][j] = f[i - 1][j];
if(j >= price && price != 0) f[i][j] = Math.max(f[i][j], f[i - 1][j - price] + x);
if(j >= price1 && price1 != 0) f[i][j] = Math.max(f[i][j], f[i - 1][j - price1] + y);
if(j >= price2 && price2 != 0) f[i][j] = Math.max(f[i][j], f[i - 1][j - price2] + z);
if(j >= price3 && price3 != 0) f[i][j] = Math.max(f[i][j], f[i - 1][j - price3] + k);
}
}
}
System.out.println(f[n][totalMoney] * 10);
}
}
class Good{
int price;
int importance;
int id;
int id1;
int id2;
public Good(int price, int importance, int id){
this.price = price;
this.importance = importance;
this.id = id;
}
public void setId1(int id1){
this.id1 = id1;
}
public void setId2(int id2){
this.id2 = id2;
}
}

查看30道真题和解析

