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];
            }
        }

 

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