5180 帶限制的子串行和

2021-10-06 01:13:43 字數 463 閱讀 6731

可以利用雙向佇列進行視窗滑動 

狀態方程

dp[i]定義為:包含i的前i個數構成最大和 (當然是滿足下標條件的最大和~)

dp[i] = max(dp[i],dp[i-j]+nums[i]); j取值0~k

在這裡,每次回去尋找前面k個數中,哪個數構成和最大。迴圈過程中,前一次迴圈和本次的前k個數有k-1個數是相同的,利用這一特點可以進行優化。

``` //dp[i]定義為:包含i的前i個數構成最大和(當然是滿足下標條件的最大和~)

int constrainedsubsetsum(vector& nums, int k)

//cout<}

int ans = -0x3f3f3f3f;

for(int i = 0; ians = max(ans,dp[i]);

return ans;

}```

LeetCode 5180 帶限制的子串行和

使用動態規劃,dp i 表示以i結束的最大子串行和,每個以i位置結束的有k 1個選擇,子串行只有這個元素或者從前面k個位置的某乙個位置接上。然後快速求前面k個的最大值,可以用到堆,從舊到新 從大到小佇列 struct node bool operator const node a,const nod...

子串行的和

輸入兩個整數n 初始版本 include int main int argc,char argv kase printf caes d 5lf kase,sum else break return 0 存在問題 1.sum賦值放在迴圈外,再次輸入時未清零 2.溢位 解決方法 1.sum賦值放到whi...

最大的連續子串行的和(輸出子串行版)

在學習動態規劃時,看到了這個求連續子串行的最大和問題,在看了些部落格之後,發現一般都是按題目要求,只是輸出了最大的和,於是我想著怎麼把子序列也輸出來。首先講講單純輸出最大和的時候吧。見核心部分 cur sum num if max cur sum if cur sum 0 這是我在別的博主那裡摘來的...