首页 > 编程语言 > 详细

leetcode 1043. 分隔数组以得到最大和

时间:2019-10-23 01:09:47      阅读:124      评论:0      收藏:0      [点我收藏+]

题意:

给出整数数组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                 if(i==4)cout<<dp[i-j]<< <<ma<<endl;
12             }
13         }
14         return dp[l];
15     }
16 };
View Code

leetcode 1043. 分隔数组以得到最大和

原文:https://www.cnblogs.com/ljy08163268/p/11723633.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!