zoukankan      html  css  js  c++  java
  • leetcode 1043. 分隔数组以得到最大和

    题意:

    给出整数数组A,将该数组分隔为长度最多为K的几个(连续)子数组。分隔完成后,每个子数组的中的值都会变为该子数组中的最大值。

    返回给定数组完成分隔后的最大和。

    示例

    输入:A = [1,15,7,9,2,5,10], K = 3
    输出:84
    解释:A 变为 [15,15,15,9,10,10,10]

    思路:

    简单DP。dp[i]表示分割完前i个数,最大值是多少。

    j表示当前段的长度[1,K]。

    假设我们知道[i-j,i]这一段的最大值curMax,那么dp[i]可以从dp[i-j]推过来。

     dp[i] = max(dp[i],dp[i-j]+curMax*j);

    curMax又可以通过遍历j的时候来更新。

     1 class Solution {
     2 public:
     3     int maxSumAfterPartitioning(vector<int>& A, int K) {
     4         int l=A.size();
     5         vector<int>dp(l+1,0);
     6         for(int i=1;i<=l;i++){
     7             int ma=0;
     8             for(int j=1;j<=K&&i-j>=0;j++){
     9                 ma=max(ma,A[i-j]);
    10                 dp[i]=max(dp[i],dp[i-j]+ma*j);
    11             }
    12         }
    13         return dp[l];
    14     }
    15 };
    View Code
  • 相关阅读:
    Winform 积累
    mvc部署iis遇到的问题总结
    开始我的BLOG生活
    sql 总结
    ajax:AutoCompleteExtender版本问题
    ancms即将上线
    ancms v2.3语言介绍
    asp.net的cms 核心代码篇
    div+css布局
    js词法结构
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/11723633.html
Copyright © 2011-2022 走看看