Leetcode 2920. Maximum Points After Collecting Coins From All Nodes

  • [Leetcode 2920. Maximum Points After Collecting Coins From All Nodes](#Leetcode 2920. Maximum Points After Collecting Coins From All Nodes)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题思路上也很直接,就是一个深度优先遍历加上一个动态规划,分别考虑在两种情况下对应的coin收集数目,然后取最大值即可。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def maximumPoints(self, edges: List[List[int]], coins: List[int], k: int) -> int:
        graph = defaultdict(list)
        for u, v in edges:
            graph[u].append(v)
            graph[v].append(u)
            
        @lru_cache(None)
        def dp(u, p, m):
            if m >= 14:
                return 0
            val = coins[u] 
            for _ in range(m):
                val = val // 2
            ans = val - k
            for v in graph[u]:
                if v == p:
                    continue
                ans += dp(v, u, m)
            if val - k < val // 2:
                ans2 = val // 2
                for v in graph[u]:
                    if v == p:
                        continue
                    ans2 += dp(v, u, m+1)
                ans = max(ans, ans2)
            return ans
        
        ans = dp(0, -1, 0)
        return ans

提交代码评测得到:耗时3186ms,占用内存424.7MB。

相关推荐
Jasmine_llq2 天前
《P6772 [NOI2020] 美食家》
动态规划·状态压缩·矩阵快速幂·事件排序与分段处理·图论基础(图的表示与遍历)
mifengxing3 天前
力扣每日一题——接雨水
c语言·数据结构·算法·leetcode·动态规划·
贝塔实验室4 天前
LDPC 码的构造方法
算法·fpga开发·硬件工程·动态规划·信息与通信·信号处理·基带工程
ゞ 正在缓冲99%…4 天前
leetcode1312.让字符串成为回文串的最少插入次数
数据结构·算法·leetcode·动态规划·记忆化搜索
Miraitowa_cheems6 天前
LeetCode算法日记 - Day 88: 环绕字符串中唯一的子字符串
java·数据结构·算法·leetcode·深度优先·动态规划
焜昱错眩..6 天前
代码随想录第四十八天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列
算法·动态规划
ゞ 正在缓冲99%…6 天前
leetcode375.猜数字大小II
数据结构·算法·leetcode·动态规划
是那盏灯塔7 天前
【算法】——动态规划之01背包问题
数据结构·c++·算法·动态规划
放羊郎7 天前
基于三维点云图的路径规划
人工智能·动态规划·slam·点云·路径规划·激光slam
Espresso Macchiato7 天前
Leetcode 3729. Count Distinct Subarrays Divisible by K in Sorted Array
leetcode·leetcode hard·容斥原理·leetcode 3729·leetcode周赛473·前序和数组