HDU 1087 最長上公升子串行和

2021-08-22 08:44:24 字數 608 閱讀 7269

題意:給你一串行,找出乙個和最大的上公升子串行, 輸出它的和。

思路:動態規劃,建立dp陣列。因為這題要求是上公升子串行,我們需要知道當前子串行末尾的值,所以可使dp[i]表示以i結尾的序列的最大和。這樣迴圈到a[i]時,可通過找到dp陣列前i-1項的最大值dp[j],並比較a[j](當前序列最後一項)與當前a[i]的大小。如果a[i] > a[j],則a[i]可加到當前序列。若沒找到,則以a[i]為開頭另起一串行,即dp[i] = a[i]。最後記錄每一次更新dp陣列時的最大值得到最終答案。

#include #include #include #include using namespace std;

int main()

, dp[1010] = ;

for(int i = 0; i < n; ++ i)

int ans = -1;

for(int i = 0; i < n; ++ i)

}if(k == -1)

else

ans = ans > dp[i] ? ans : dp[i];

}cout << ans << endl;

}return 0;

}

HDU1087(最長上公升子串行DP)

解題思路 i j 時 dp i max dp j a i a i 記錄儲存最大的dp i 值即可。dp i 代表從1到 i 的最大上公升子串行的和,裡層迴圈為dp i 做更新,尋找1到 i 區間內的最大上公升子串行和,從而使得其具有區域性最優子結構。完整 include include includ...

動態規劃 最大上公升子串行(hdu1087)

題目描述 求乙個序列中 不一定連續 可以跳躍 但是數值遞增的最大和子串行 解題思路 這道題和之前的子串行題不一樣,因為無法判斷當前節點的取捨情況,即1,2,10序列,這個10我未必會選,因為10後面可能是7,8,9 看起來總覺得和揹包問題有什麼聯絡,其實的確差不多。我們先假設 乙個點i,以及某個子最...

hdu1087(求乙個長上公升子串行,使其和最大)

此題比較適合dp入門的人做一下。最近剛學記憶化搜尋,所以用記憶化搜尋寫了乙個,dp i 表示從第i個元素出發得到最大的上公升子串行的和,狀態轉移方程dp i max d p i dp j a i j i a i 如下 include include include include include i...