leetcode 813. Largest Sum of Averages

Posted newnoobbird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 813. Largest Sum of Averages相关的知识,希望对你有一定的参考价值。

对于一个数组中的数进行分组,取每个组里的平均值进行加和的。

使用动态规划,其中dp[i][k]表示以i为结尾的有k个分组的,那么递推式为: dp[i][k]=dp[j][k-1]+(sum[i]-sum[j])/(i-j)的,那么当k=1的时候就初始化为组内的平均值的,其中j的初始化为k-2,因为是从0为起始点的。

class Solution {
public:
    double largestSumOfAverages(vector<int>& A, int K) {
        int n=A.size();
        vector<double> sum(n,0);
        sum[0]=A[0];
        for(int i=1;i<n;i++){
            sum[i]=sum[i-1]+A[i];
        }
        
        vector<vector<double>> dp(n,vector<double>(K+1,0));
        for(int k=1;k<=K;k++){
            for(int i=0;i<n;i++){
                if(k==1){
                    dp[i][k]=sum[i]/(i+1);
                }
                else if(k-2<i){
                    for(int j=k-2;j<i;j++){
                        dp[i][k]=max(dp[i][k],dp[j][k-1]+(sum[i]-sum[j])/(i-j) );
                    }
                }
            }
        }
        /*
        for(int i=0;i<n;i++){
            for(int j=1;j<=K;j++){
                cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
            }
        }
        */
        return dp[n-1][K];
    }
};

 

以上是关于leetcode 813. Largest Sum of Averages的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 813 Largest Sum of Averages (区间dp)

leetcode 813. Largest Sum of Averages

Leetcode410. Split Array Largest Sum

[Leetcode] Split Array Largest Sum

[Leetcode] Split Array Largest Sum

Leetcode 410. Split Array Largest Sum