码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 813. Largest Sum of Averages

时间:2018-09-12 01:28:32      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:class   span   分组   code   solution   均值   tor   平均值   public   

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

使用动态规划,其中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

标签:class   span   分组   code   solution   均值   tor   平均值   public   

原文地址:https://www.cnblogs.com/newnoobbird/p/9631639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!