爬樓梯
//1.爬樓梯
intmincostclimbingstairs
(int cost,
int n)
+ cost[i];}
return min
;}
house robber
robber
introb
(int nums,
int n)
;for
(int i =
2; i < n; i++
)return dp[n -1]
;}
最長上公升子串行
//3.最長上公升子串行
intlengthoflis
(int nums,
int n);}
max = max;}
return max;
}
最長公共子串行
void
lcslength
(int m,
int n,
char
*x,char
*y,int dp[
]);}
}}return dp[m]
[n];
}
edit distance
int mindistance(string word1, string word2)
+ 1; //delet和insert中找最小的
if (word1.charat(i - 1) == word2.charat(j - 1))
;//如果最後乙個元素相同,則找前乙個和這個,誰最小
}else
;//如果不相同,則和replace進行比較}}
}}
0-1揹包的意思是:要麼拿,要麼不拿;拿只能拿一整個,不存在只是拿部分;物品只有乙個,拿了之後就沒了
//問題描述:
input:
n items
v[i]: ith item 的價值
w[i]: ith item 的重量
c:knapsack 的最大承重量
note: at most one copy of each item
output: 能帶走的最大價值總和
//問題分析:
f(i,j)
=max
//第i個物品不選,第i個物品選,從中選出最大的一項出來
base case:f(
0,j)=0
//房子內沒有物品
f(i,0)
=0//沒有帶袋子/或者是袋子已經滿了
public int
knapsack
(int
&v,int
&w,int c)}}
}
動態規劃例題
題目描述 有一條很長的數軸,一開始你在0的位置。接下來你要走n步,第i步你可以往右走ai或者bi。問n步之後,0到m的每個位置,能不能走到?輸入格式 第一行,兩個整數n,m。接下來n行,每行兩個整數ai,bi。輸出格式 一行,一共m 1個數,每個數都是0或1表示能否走到,數字之間不用空格隔開。樣例輸...
《動態規劃》 ACM 動態規劃例題詳解
描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...
動態規劃及其動態規劃經典例題
動態規劃是最重要 最經典的演算法之一,學好動態規劃對我們十分重要,掌握動態規劃對解決某些問題會起到事半功倍的效果。特點 可以把原始問題劃分為一系列子問題 求解每個子問題僅一次,並將其結果儲存到乙個表中,以後用到時直接訪問,不重複計算,節省時間。自底向上地計算 適用範圍 原問題可以分為多個相關子問題,...