Untitled
unknown
plain_text
a year ago
1.3 kB
11
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