LeetCode 1043. 分隔数组以得到最大和 (线性DP)

分隔数组以得到最大和

  • 状态: d p [ i ] dp[i] dp[i]表示一个前缀串 [ 1 , i ] [1,i] [1,i]所能获得的最大值。
  • DP方程: d p [ i ] = m a x { d p [ i − j ] + j ∗ m a x { a k } ( i − j ≤ k ≤ i − 1 ) } dp[i] =max\{dp[i-j]+j*max\{a_k\}(i-j≤k≤i-1) \} dp[i]=max{ dp[ij]+jmax{ ak}(ijki1)}
class Solution {
    
    
public:
    int maxSumAfterPartitioning(vector<int>& a, int k) {
    
    
        int n = a.size();
        vector<int> dp(n+1,0);
        for(int i=1;i<=n;i++){
    
    
            int mmax = 0;
            for(int j=1;j<=k;j++){
    
    
                if(i-j>=0){
    
    
                    mmax = max(mmax,a[i-j]);
                    dp[i] =  max(dp[i],dp[i-j]+j*mmax);
                }
            }
        }
        return dp[n];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/108453702