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