背景:感受到了,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...