3-2單調遞增最長子序列(25分)
設計乙個o(n2)時間的演算法,找出由n個數組成的序列的最長單調遞增子串行。
輸入格式:
輸入有兩行: 第一行:n,代表要輸入的數列的個數 第二行:n個數,數字之間用空格格開
輸出格式:
最長單調遞增子串行的長度
輸入樣例:
在這裡給出一組輸入。例如:
51 3 5 2 9
輸出樣例:
在這裡給出相應的輸出。例如:
4遞迴方程:b[i] = max( b[j]+1 , b[i])
具體**如下:
#include usingnamespace
std;
int a[100
];int lmax(int
n)
if (max }
}return
max;
}int
main()
cout
<}
填表的維度為一維陣列,填表範圍在0-i,自前往後填表。
第一層迴圈遍歷了整個陣列,第二層迴圈又將每個元素作為掃瞄的終點,故時間複雜度為o(n^2),空間複雜度為o(1)。
對動態規劃演算法的理解:要使用動態規劃的方法,首先要找到該問題最底層的通解,再巢狀地從這些子問題的解得到原問題的解。由於子問題可能會被重複計算多次,所以我們使用乙個表記錄子問題的答案,在計算問題之前先查表,若其子問題已經被計算過則直接使用表中的資料即可,相較於分治法節省了大量時間開銷。
結對程式設計情況:在結對程式設計中有時候會遇到兩個人都難以解答的問題,在上網搜尋相關資料後可以根據自己的理解向對方講出解題的大致思路和想法,即使是面對相同的**也能有不同的理解。我認為這樣很有利於拓展思維方式,跳出慣性思維。
演算法第三章作業
1.動態規劃是一種能夠減少重複運算的一種演算法,比較適合原問題能依賴於子問題解得,而子問題也能夠依賴於子子問題解得而出的問題。其次,動態規劃更適合於資料量較多的時候的一種演算法,當資料量沒有到達一定規模的時候,動態規劃演算法不能夠體現出足夠的優勢。如對於揹包問題的貪心演算法和動態規劃法 2.1 單調...
演算法第三章作業
我覺得動態規劃是一種分治法的偽高階型,它將乙個大問題可以分成若干個小問題後,解決子問題,然後將子問題的解插入到乙個表中,用乙個表來記錄所有的已經得到答案的子問題的解,後面就可以發現,無論子問題的解是否被用到,其都在表中,接著求問題便可以節省大量的時間。3 1m i 1 n 1 m i max 1 1...
演算法第三章作業
組員 高珞洋,何汶珊 之前在學習分治法的時候也有將其和動態規劃進行比較,動態規劃能夠解題的根本要求是原問題可以細分成子問題,且原問題的最優解必包含子問題的最優解。為了更明確上述條件,從而保證題目能夠運用動態規劃求解,通常需要兩步操作 明確問題具有最優子結構,並分解問題 找出遞推關係式 狀態轉移方程 ...