Untitled
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