[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); } } }

浙公网安备 33010602011771号