可以利用雙向佇列進行視窗滑動
狀態方程
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 這是我在別的博主那裡摘來的...