HDU 1024 Max Sum Plus Plus 基礎dp

一開始是這麼想的,對於每一個區間,取到一個數的時候,要麼就取這個數,要麼就不取這個數,取到取不到,結合前面那個點是取到還是沒取到的狀態,可以寫出一個弱智的轉移方程來。然後,我就因爲無法充分地降維放棄了這個想法。其實大佬們是這樣做這個題的,每一個數,作爲當前區間當前點被選中時,可以作爲當前這個新區間的起點,也可以不作爲當前這個新區間的起點。這樣寫出來的轉移方程,可以把數組降一維防止炸空間,還可以開一個額外的數組在時間上再降一維,最終達到了可以接受的複雜度。

大佬核心代碼:

for (int i=1; i<=m; i++)
        {
            maxx=-922337203685477580;
            for (int j=i; j<=n; j++)
            {
                if (i==j) dp[j]=mk[j-1]+num[j];
                else dp[j]=max(dp[j-1],mk[j-1])+num[j];
                mk[j-1]=maxx;
                if (maxx<dp[j]) maxx=dp[j];
            }
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章