hdu 1003 基礎dp 最大字連續子串和

2021-06-28 23:16:00 字數 715 閱讀 9701

背景:感受到了,dp的進化就是找到轉移方程,而這都需要練習一定量的題來找感覺。

思路:1.動態規劃:

轉移方程:

f[i]=max

//f[i]表示以i結尾的字串的最大和,a[i]是第i個數的值

這裡把"以i結尾的最大字串和"作為狀態十分巧妙,這樣就能實現,乙個接乙個的人轉移了,因為都是結尾,只需要考慮選不選當前乙個,如果以i-1結尾的最大連續字串和大於0則以i結尾的最大連續字串和就是f[i-1] + a[i],否則就是a[i]。dp的本質記憶搜尋中已經計算過的,避免重複計算,但是只具有這個思想,距離找到具體的轉移方程還是需要巧妙的思維。這個題的主要思維是這樣的轉移方程才具有可轉移性。

2.貪心思想也是可以的,以當前數字結尾的字串如果為負就,把下一數當做開頭,繼續找,實質看來和動態規劃一樣。

我的**:

//hdu 1003

#include#includeusing namespace std;

int a[100009],f[100009];

int main(void)

else

if(f[i] > max)

}if(k-1) printf("\n");

printf("case %d:\n%d %d %d\n",k,max,start,end);

}return 0;

}

hdu 1003 最大最長子序列 dp

我的dp思路是 記b j 表示到到j位,最大最長的子串行的和 則可得狀態轉移方程b j max b j 1 a j a j 因為每個數都有兩種狀態,要麼和前面相連,要麼自己相連 讓後再比較出來最大值 一下是我的 include include include include include incl...

hdu1003最大子串行和

看了一些別人的題解,說實話,我現在還不會證明這個,我不知道為什麼這樣是最大值 hdu1003最大連續子串行和 sum i sum i 1 0 sum i 1 a i a i 只有當sum處於增長狀態時才會得到最大子串行 當sum處於減小狀態時,應當更新起點 include using namespa...

HDU1003 最大子串行和

大學搞過兩年的acm,今天心血來潮的去杭電oj上瀏覽了一下,真幸運賬號居然沒有記錯。然後想著之前學過很多經典的演算法,但是很遺憾當時沒有記錄下來,所以現在彌補遺憾的時候到了,演算法會不定期更新。include int array 100005 n void maxsubsum1 void maxsu...