BudiBadu Logo

Max Harvest with Rest

Dynamic Programming Hard 6 views
Like5

On a hillside farm each plot yields a certain amount of fruit You can collect from one plot per day but there's a catch after harvesting a plot you must rest the following day to prevent soil exhaustion Your goal in Max Harvest with Rest is to compute the maximum total harvest you can collect without ever working on two consecutive days The secret sauce here is Dynamic Programming DP Instead of just picking the biggest numbers you have to weigh current rewards against future potential For example skipping a medium-sized harvest today might allow you to pick a massive one tomorrow You build the solution by tracking the best possible total at each day considering whether you harvested the day before or not This scheduling challenge turns a simple gathering task into a masterclass in strategic planning It s the ultimate way to practice balancing immediate gains with long-term success Because this is a counting optimization-style challenge dynamic programming is usually the safest approach define what each index or state means initialize valid base states and make transitions explicit If the problem uses modulo arithmetic apply modulo at every accumulation step so large intermediate totals never corrupt the final answer At hard difficulty hidden tests usually combine scale with edge behavior so the implementation must be both asymptotically efficient and logically strict Define transitions unambiguously prevent stale-state contamination and confirm tie-breaking or fallback rules are encoded directly in the

Examples

Example 1
Input
harvest = [2,7,9,3,1]
Output
12
Explanation

Harvest plots at indices 1, 3, and 4 (7+3+1) or indices 0,2,4 (2+9+1); the maximum is 12.

Example 2
Input
harvest = [1,2,3,1]
Output
4
Explanation

Harvest plots at indices 0 and 2 for a total of 4.

Example 3
Input
harvest = []
Output
0
Explanation

No plots mean no harvest.

Algorithm Flow

Recommendation Algorithm Flow for Max Harvest with Rest - Budibadu
Recommendation Algorithm Flow for Max Harvest with Rest - Budibadu

Best Answers

java
class Solution {
    public int max_harvest_with_rest(Object harvest) {
        if (harvest == null) return 0;
        int[] h = (int[]) harvest;
        if (h.length == 0) return 0;
        if (h.length == 1) return Math.max(0, h[0]);
        
        int prev2 = Math.max(0, h[0]);
        int prev1 = Math.max(prev2, h[1]);
        
        for (int i = 2; i < h.length; i++) {
            int current = Math.max(prev1, Math.max(0, h[i]) + prev2);
            prev2 = prev1;
            prev1 = current;
        }
        
        return prev1;
    }
}