状态: 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[i−j]+j∗max{
ak}(i−j≤k≤i−1)}
classSolution{
public:intmaxSumAfterPartitioning(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];}};