1.1 根據最優子結構性質,列出遞迴方程式
dp[i]表示以a[i]為結尾的最長子序列,因為必包含自己,所以均初始化為1。
dp[i]=max(dp[j],dp[i]-1)+1;
1.2 給出填表法中表的維度、填表範圍和填表順序。
表的維度是1,填表範圍為1-n,填表順序為從左往右。
1.3 分析該演算法的時間和空間複雜度
因為演算法裡有兩重迴圈,所以時間複雜度為o(n²),空間複雜度為o(n)。
動態規劃思想與分治法類似,都是將問題分解為多個子問題,通過求解子問題來得到最終答案,而動態規劃的優勢在於,動態規劃防止了子問題的重複計算,每個問題只計算一次,自底向上地求出原問題的解。
結對程式設計的時候一直沒有想到先把左邊界和上邊界初始化,所以就卡在了這裡很久。之後查閱了資料才知道可以先初始化邊界,然後再用二維dp[i][j]存放從(1,1)到(i,j)最低的費用。這樣dp[n][m]就是答案。
演算法第三章作業 「單調遞增最長子序列」
7 1 單調遞增最長子序列 設計乙個o n2 時間的演算法,找出由n個數組成的序列的最長單調遞增子串行。輸入格式 輸入有兩行 第一行 n,代表要輸入的數列的個數 第二行 n個數,數字之間用空格格開 輸出格式 最長單調遞增子串行的長度 輸入樣例 在這裡給出一組輸入。例如 51 3 5 2 9 輸出樣例...
演算法第三章作業
1.動態規劃是一種能夠減少重複運算的一種演算法,比較適合原問題能依賴於子問題解得,而子問題也能夠依賴於子子問題解得而出的問題。其次,動態規劃更適合於資料量較多的時候的一種演算法,當資料量沒有到達一定規模的時候,動態規劃演算法不能夠體現出足夠的優勢。如對於揹包問題的貪心演算法和動態規劃法 2.1 單調...
演算法第三章作業
我覺得動態規劃是一種分治法的偽高階型,它將乙個大問題可以分成若干個小問題後,解決子問題,然後將子問題的解插入到乙個表中,用乙個表來記錄所有的已經得到答案的子問題的解,後面就可以發現,無論子問題的解是否被用到,其都在表中,接著求問題便可以節省大量的時間。3 1m i 1 n 1 m i max 1 1...