質問337:ハウス強盗III(動的計画法)

1.タイトル

ここに画像の説明を挿入ここに画像の説明を挿入

2.私の最初の考えと問題

少し、ソリューションを直接見てください

3.問題解決方法1:動的計画法

ここに画像の説明を挿入

class Solution {
    
    
    Map<TreeNode, Integer> f = new HashMap<TreeNode, Integer>();
    Map<TreeNode, Integer> g = new HashMap<TreeNode, Integer>();

    public int rob(TreeNode root) {
    
    
        dfs(root);
        return Math.max(f.getOrDefault(root, 0), g.getOrDefault(root, 0));
    }

    public void dfs(TreeNode node) {
    
    
        if (node == null) {
    
    
            return;
        }
        dfs(node.left);
        dfs(node.right);
        f.put(node, node.val + g.getOrDefault(node.left, 0) + g.getOrDefault(node.right, 0));
        g.put(node, Math.max(f.getOrDefault(node.left, 0), g.getOrDefault(node.left, 0)) + Math.max(f.getOrDefault(node.right, 0), g.getOrDefault(node.right, 0)));
    }
}

ここに画像の説明を挿入

class Solution {
    
    
    public int rob(TreeNode root) {
    
    
        int[] rootStatus = dfs(root);
        return Math.max(rootStatus[0], rootStatus[1]);
    }

    public int[] dfs(TreeNode node) {
    
    
        if (node == null) {
    
    
            return new int[]{
    
    0, 0};
        }
        int[] l = dfs(node.left);
        int[] r = dfs(node.right);
        int selected = node.val + l[1] + r[1];
        int notSelected = Math.max(l[0], l[1]) + Math.max(r[0], r[1]);
        return new int[]{
    
    selected, notSelected};
    }
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/ambitionLlll/article/details/114365598