@@ -25,30 +25,36 @@ public static void main(String[] args) throws IOException {
25
25
string = reader .readLine ().split (" " );
26
26
goodsArray [i ] = new Goods (Integer .parseInt (string [0 ]), Integer .parseInt (string [1 ]), Integer .parseInt (string [2 ]));
27
27
if (goodsArray [i ].q == 0 ) {
28
- appendix .put (goodsArray [i ], new ArrayList <Goods > ());
28
+ appendix .put (goodsArray [i ], new ArrayList <> ());
29
29
}
30
30
}
31
31
for (int i = 0 ; i < m ; i ++) {
32
- if (goodsArray [i ].q > 0 ) {
33
- List <Goods > goods = appendix .get (goodsArray [goodsArray [i ].q - 1 ]);
34
- goods .add (goodsArray [i ]);
35
- appendix .put (goodsArray [goodsArray [i ].q - 1 ], goods );
32
+ Goods goods = goodsArray [i ];
33
+ if (goods .q > 0 ) {
34
+ appendix .computeIfPresent (goodsArray [goods .q - 1 ],
35
+ (k , v ) -> {
36
+ v .add (goods );
37
+ return v ;
38
+ });
36
39
}
37
40
}
38
-
39
41
int [] dp = new int [N + 1 ];
40
42
for (Map .Entry <Goods , List <Goods >> entrySet : appendix .entrySet ()) {
41
43
Goods mainGoods = entrySet .getKey ();
42
- int zeroCost = mainGoods .v , totalCost = zeroCost , totalWeight = zeroCost * mainGoods .p ;
43
- for (int i = N ; i >= zeroCost ; i --) {
44
- dp [i ] = Math .max (dp [i - zeroCost ] + zeroCost * mainGoods .p , dp [i ]);
44
+ for (int i = N ; i >= mainGoods .v ; i --) {
45
+ int totalCost = mainGoods .v ;
46
+ int totalWeight = mainGoods .w ;
47
+ dp [i ] = Math .max (dp [i - mainGoods .v ] + mainGoods .w , dp [i ]);
45
48
for (Goods sub : entrySet .getValue ()) {
46
- dp [i ] = Math .max (dp [Math .max (0 , i - zeroCost - sub .v )] + sub .v * sub .p + zeroCost * mainGoods .p , dp [i ]);
49
+ if (i - mainGoods .v - sub .v >= 0 ) {
50
+ dp [i ] = Math .max (dp [i - mainGoods .v - sub .v ] + sub .w + mainGoods .w , dp [i ]);
51
+ }
47
52
totalCost += sub .v ;
48
- totalWeight += sub .v * sub .p ;
53
+ totalWeight += sub .w ;
54
+ }
55
+ if (i - totalCost >= 0 ) {
56
+ dp [i ] = Math .max (dp [i - totalCost ] + totalWeight , dp [i ]);
49
57
}
50
- dp [i ] = Math .max (dp [Math .max (0 , i - totalCost )] + totalWeight , dp [i ]);
51
- System .out .println (dp [i ]);
52
58
}
53
59
}
54
60
System .out .println (dp [N ]);
@@ -59,10 +65,22 @@ class Goods {
59
65
int v ;
60
66
int p ;
61
67
int q ;
68
+ int w ;
62
69
63
70
public Goods (int v , int p , int q ) {
64
71
this .v = v ;
65
72
this .p = p ;
66
73
this .q = q ;
74
+ this .w = p * v ;
75
+ }
76
+
77
+ @ Override
78
+ public String toString () {
79
+ return "Goods{" +
80
+ "v=" + v +
81
+ ", p=" + p +
82
+ ", q=" + q +
83
+ ", w=" + w +
84
+ '}' ;
67
85
}
68
86
}
0 commit comments