Untitled

 avatar
unknown
plain_text
10 months ago
1.3 kB
9
Indexable
 int solution(int n, int target, int days, int[] skillPoints) {
        // Check if a target can be met with given k
        class Checker {
            boolean canAchieveTarget(int k) {
                int[][] dp = new int[days + 1][n + 1];

                for (int i = 1; i <= days; i++) {
                    for (int j = 0; j < n; j++) {
                        dp[i][j] = dp[i - 1][j];
                        if (i > k) dp[i][j] = Math.max(dp[i][j], dp[i - k - 1][j] + skillPoints[j]);
                        else dp[i][j] = Math.max(dp[i][j], skillPoints[j]);
                        if (j > 0) dp[i][j] = Math.max(dp[i][j], dp[i][j - 1]);
                    }
                }

                for (int j = 0; j < n; j++) {
                    if (dp[days][j] >= target) return true;
                }

                return false;
            }
        }

        Checker checker = new Checker();

        // Binary search for the maximum k
        int low = 0, high = days;
        int result = -1;

        while (low <= high) {
            int mid = (low + high) / 2;
            if (checker.canAchieveTarget(mid)) {
                result = mid;
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        }

        return result;
    }
Editor is loading...
Leave a Comment