LeetCode每日一题,2025-8-7
最多可收集的水果数目
首先要明白第一个人只能沿着对角线走,
然后题目就变成了从(0,n-1)->(n-2,n-1)只能走n-1步的情况 下最多能取到的最大值
class Solution {public int maxCollectedFruits(int[][] fruits) {int n = fruits.length;int[][] memo = new int[n][n];int res = 0;for(int i = 0; i < n; i ++){res += fruits[i][i];}for(int[] row : memo){Arrays.fill(row, -1);}res += dfs(fruits, n-2, n-1, memo);for(int[] row : memo){Arrays.fill(row, -1);}for(int i = 0; i < n; i ++){for(int j = i + 1; j < n; j ++){fruits[i][j] = fruits[j][i];}}res += dfs(fruits, n-2, n-1, memo);return res;}private int dfs(int[][] fruits, int i, int j, int[][] memo) {int n = fruits.length;if(i == 0 && j == n - 1)return fruits[i][j];if(i + j < n - 1 || j >= n)return 0;if(memo[i][j] != -1)return memo[i][j];int res = 0;int r1 = dfs(fruits, i - 1, j, memo);int r2 = dfs(fruits, i - 1, j - 1, memo);int r3 = dfs(fruits, i - 1, j + 1, memo);res = Math.max(r1, Math.max(r2, r3)) + fruits[i][j];return memo[i][j] = res;}
}