hdu 1003 求最長子序列的和

2021-08-11 21:34:53 字數 892 閱讀 5768

(1)型別:動態規劃(最長子序列);

(2)有關動態規劃:1,運用動態規劃的乙個前提。即解決問題的過程的最優策略應具有這樣的性質:無論初始狀態及初始決策如何,對於先前決策所形成的狀態而言,其以後的所有決策應構成最優策略。簡單來說,就是「最優策略的子策略也是最優策略」。2,提出應用動態規劃的乙個重要條件。那就是將各階段按照一定的次序排列好之後,對於某個給定的階段狀態,它以前各階段的狀態無法直接影響它未來的發展,而只能通過當前的這個狀態。換句話說,每個狀態都是「過去歷史的乙個完整總結。

(3)題意:給乙個n,表示有n組測試資料。隨後有n行,每行第乙個整數代表每組資料後面的數值的個數。求每組資料中最長上公升子串行的和,以及,最長子序列的起始位置和終止位置的下標。每行輸出後面乙個換行,最後一行不用多加換行。

(4)解題思路:從當前位置記錄最大值,並記錄起始位置和終止位置,當sum大於maxsum時更替。需要注意的是,當sum小於0時需要重新更換起始位置的值,一開始我的就弄錯了,後來看了別人的**才知道**漏掉了。

(5)時間複雜度:o(n)。

(6)總結:第一,pe了一次,是因為最後一組陣列不用加換行。wa了好多次,因為沒有加sum小於0的情況。加這個情況就是為了去除加上大負數的情況,為了計算當sum小於0後面的情況以後,後面的子串行中可能出現的sum會大於前面的計算過的sum的值的情況。

(7)**:

#include

using

namespace

std;

const

int max_n=1e5+6;

int a[max_n];

int main()

if(sum<0)

}cout

<" "

<" "

<}

}

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...