最長遞增子串行的問題
給定陣列arr,返回arr的最長遞增子串行長度。比如arr=,最長遞增子串行為,返回arr的最長遞增子串行長度。比如arr=,最長遞增子串行為所以返回這個子串行的長度為5。
解決方案:
arr:2 1 5 3 6 4 8 9 7
dp:1 1 2 2 3 3 4 5 4
dp[i]表示在必須以arr[i]這個書結尾的情況下,
arr[0..i]中最大遞增子串行長度。
dp[i]=maxdp[j]+1,j大於等於0,j小於i,
arr[j]小於arr[i],
給定兩個字串str1和str2,返回兩個字串的最長公共子串行。例如,str1=」1a2c3d4b56」,str2=」b1d23ca45b6a」,「」123456「或者」12c4b6」都是最長公共子串行,返回哪乙個都行。
揹包問題
乙個揹包有一定的承重w,有n件物品,每件都有自己的價值,記錄在陣列v中,也都有自己的重量,記錄在陣列w中,每件物品只能選擇要裝入揹包還是不裝入揹包,要求在不超過揹包承重的前提下,選出物品的總價值最大
解決問題:
假設物品編號1到n,一件一件物品考慮是否加入揹包,
假設dp[x][y]表示前x件物品,不超過重量y的時候的最大價值。列舉一下第x件物品的情況:
情況一:如果選擇第x件物品,則前x-1件物品得到的重量不能超過y-w[x].
情況二:如果不選第x件物品,則前x-1件物品得到的重量不能超過y。
所以,dp[x][y]可能等於dp[x-1][y],也就是不去第x件物品時,**和之前一樣。
也可能是dp[x-1][y-w[x]]+v[x],也就是拿第x件物品的情況
兩種可能興中,應該選擇價值最大的那個,dp[x][y]=1/dp[x-1][y]
2.dp[x-1][y-w[x]]+v[x]的最大值
對於dp矩陣來說,行數是物品的數量n,列數是揹包的重量,再從上到下以此計算所有的dp值即可。
最優編輯
給定兩個字串str1和str2,在給定三個整數ic,dc和rc,分別代表插入、刪除和替換乙個字元的代價。返回將str1編輯成str2的最小代價。比如,str1=」abc」,str2=」adc」,ic=5,dc=3,rc=2.從」abc」編輯成」adc」,把b替換成d是代價最小的,所以返回2.再比如,str1=」abc」,str2=」adc」,ic=5,dc=3,rc=100.從abc編輯成adc,先刪除b,然後再插入d是代價最小的,所以返回8
解決方案
動態規劃2
動態規劃是研究一類最優化問題的方法,在經濟 工程技術 企業管理 工農業生產及軍事等領域中都有廣泛的應用。近年來,在acm icpc中,使用動態規劃 或部分應用動態規劃思維 求解的題不僅常見,而且形式也多種多樣。而在與此相近的各類資訊學競賽中,應用動態規劃解題已經成為一種趨勢,這和動態規劃的優勢不無關...
動態規劃(2)
題目輸入格式 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2.r 1行 每行c個數,表示這個矩陣。輸出格式 僅一行 輸出1個整數,表示可以滑行的最大長度。樣例輸入 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 ...
動態規劃 2
飛彈攔截 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度...