Skip to content

Commit fea6bb3

Browse files
committed
刷水题
1 parent bd2a8ba commit fea6bb3

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

leetcode/src/main/java/daily/HJ16.java

+31-13
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)