813. Largest Sum of Averages

813. Largest Sum of Averages

class Solution {
public:
    double largestSumOfAverages(vector<int>& A, int K) {
        int n = A.size();
        
        // dp[k][i]: largestSumOfAverages of [0,i] with up to k partitions
        // dp[0][i]: largestSumOfAverages of [0,i] with 0 partition = (sums[i+1]-sums[0])/(i+1)
        // dp[k][i]: max(dp[k-1][j] + (sums[i+1]-sums[j+1]) / (i-j), dp[k-1][i])
        vector<vector<double>> dp(K, vector<double>(n, 0));
        
        vector<double> sums(n+1, 0);
        for (int i = 0; i < A.size(); i++)
            sums[i+1] = sums[i] + A[i];
        
        for (int i = 0; i < n; i++)
            dp[0][i] = (sums[i+1] - sums[0]) / (i+1);  // single partition
        for (int k = 1; k < K; k++) {
            for (int i = 0; i < n; i++) {
                dp[k][i] = dp[k-1][i];
                for (int j = 0; j < i; j++) {
                    dp[k][i] = max(dp[k][i], dp[k-1][j] + (sums[i+1]-sums[j+1]) / (i-j));
                }
            }
        }
        
        return dp[K-1][n-1];
    }
};

 

转载于:https://www.cnblogs.com/JTechRoad/p/8978410.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101688.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号