[Leetcode 1981. 最小化目标值与所选元素的差] 记忆化搜索

 

 

记忆化搜索

class Solution {
    int ans = 5001;

    public int minimizeTheDifference(int[][] mat, int target) {
        int[][] state = new int[71][4901];
        dfs(0, mat, target, 0, state);
        return ans;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.minimizeTheDifference(new int[][]{
                {3, 5}, {5, 10}
        }, 47);
    }

    public void dfs(int i, int[][] mat, int target, int now, int[][] state) {
        if (i == mat.length) {
            ans = Math.min(Math.abs(now - target), ans);
            return;
        }

        if (state[i][now] != 0) {
            return;
        }

        if (now - target >= ans) {
            return;
        }

        state[i][now] = 1;
        for (int j = 0; j < mat[0].length; j++) {
            dfs(i + 1, mat, target, now + mat[i][j], state);
        }
    }
}

 

posted @ 2022-05-18 22:59  fishcanfly  阅读(53)  评论(0)    收藏  举报
//雪花飘落效果