Skip to content

Commit f4c7ba2

Browse files
authored
Create 2920-maximum-points-after-collecting-coins-from-all-nodes.js
1 parent 2c60bd1 commit f4c7ba2

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* @param {number[][]} edges
3+
* @param {number[]} coins
4+
* @param {number} k
5+
* @return {number}
6+
*/
7+
const maximumPoints = function (edges, coins, k) {
8+
const n = coins.length
9+
const g = Array(n)
10+
.fill()
11+
.map(() => [])
12+
for (const edge of edges) {
13+
const [u, v] = edge
14+
g[u].push(v)
15+
g[v].push(u)
16+
}
17+
const dp = Array(n)
18+
.fill()
19+
.map(() => Array(15).fill(-1))
20+
const dfs = (node, parent, reduce) => {
21+
if (dp[node][reduce] !== -1) {
22+
return dp[node][reduce]
23+
}
24+
if (reduce >= 14) {
25+
return (dp[node][reduce] = 0)
26+
}
27+
let currCoins = coins[node]
28+
for (let j = 0; j < reduce; j++) {
29+
currCoins = Math.floor(currCoins / 2)
30+
}
31+
let way1 = currCoins - k
32+
let way2 = Math.floor(currCoins / 2)
33+
for (const child of g[node]) {
34+
if (child !== parent) {
35+
dfs(child, node, reduce + 1)
36+
dfs(child, node, reduce)
37+
way1 += dp[child][reduce]
38+
way2 += dp[child][reduce + 1]
39+
}
40+
}
41+
dp[node][reduce] = Math.max(way1, way2)
42+
return dp[node][reduce]
43+
}
44+
dfs(0, -1, 0)
45+
46+
return dp[0][0]
47+
}

0 commit comments

Comments
 (0)