Problem 2 Largest Sum of Averages
public double largestSumAverage(int[] array, int k) {
// assume array is valid
double[][] dp = new double[k+1][array.length + 1];
double[] prefixSum = new double[array.length + 1];
for (int i; i <= array.length; i++) {
prefixSum[i] = prefixSum[i - 1] + array[i - 1];
}
// base case
for (int i = 1; i <= array.length; i++) {
dp[1][j] = prefixSum[i]/i;
}
// 把长度为j东西,分成i份:dp[i][j]
for (int i = 2; i <= k; i++) {
for (int j = i; j <= array.length; j++) { // 长度
if (i = j) {
dp[i][j] = dp[i - 1][j - 1] + array[j- 1]/ 1;
}
else {
for (int leftLength = i - 1; leftLength < j; leftLength++) {
dp[i][j] = Math.max(dp[i][j], dp[i - 1][leftLength] + (prefixSum[j] - prefixSum[leftLength]) / (j - leftLength));
}
}
}
}
return dp[k][array.length];
}Method 2:
Last updated