@@ -25,30 +25,36 @@ public static void main(String[] args) throws IOException {
2525 string = reader .readLine ().split (" " );
2626 goodsArray [i ] = new Goods (Integer .parseInt (string [0 ]), Integer .parseInt (string [1 ]), Integer .parseInt (string [2 ]));
2727 if (goodsArray [i ].q == 0 ) {
28- appendix .put (goodsArray [i ], new ArrayList <Goods > ());
28+ appendix .put (goodsArray [i ], new ArrayList <> ());
2929 }
3030 }
3131 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+ });
3639 }
3740 }
38-
3941 int [] dp = new int [N + 1 ];
4042 for (Map .Entry <Goods , List <Goods >> entrySet : appendix .entrySet ()) {
4143 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 ]);
4548 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+ }
4752 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 ]);
4957 }
50- dp [i ] = Math .max (dp [Math .max (0 , i - totalCost )] + totalWeight , dp [i ]);
51- System .out .println (dp [i ]);
5258 }
5359 }
5460 System .out .println (dp [N ]);
@@ -59,10 +65,22 @@ class Goods {
5965 int v ;
6066 int p ;
6167 int q ;
68+ int w ;
6269
6370 public Goods (int v , int p , int q ) {
6471 this .v = v ;
6572 this .p = p ;
6673 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+ '}' ;
6785 }
6886}
0 commit comments