DP
shimingliabc
这个作者很懒,什么都没留下…
展开
-
DP(6)
Gray Code 格雷码不唯一。以下代码没有通过LeetCode的测试,但是输出是符合格雷码规则的编码序列。 bool diff(int a, int b, int n) { int s = a^b; for (int i = 0; i < n; i++) { if ((1 << i) == s)原创 2016-03-18 08:38:44 · 201 阅读 · 0 评论 -
DP(4)
LeetCode #120int minimumTotal(vector<vector<int>>& triangle) { const int INF = 10000; vector<vector<int>> d(triangle); for (int i = 1; i < d.size(); i++) { for (int j = 0; j < d[原创 2016-03-16 16:25:22 · 275 阅读 · 0 评论 -
DP(3)
LeetCode #135int candy(vector<int> &ratings) { int len = ratings.size(); vector<int> candy_vec(len); //初始化 for (auto &i : candy_vec) i = 1; //left -> right for (int i =原创 2016-03-16 08:44:37 · 204 阅读 · 0 评论 -
DP(0)
动态规划状态转移方程 DAG : 有向无环图LCS最长公共子序列(longest common squence):不要求连续 最长公共子串(longest common substring):要求连续原创 2016-03-13 21:51:00 · 222 阅读 · 0 评论 -
DP(2)
LCS最长公共子串 子串连续 step1. 二维矩阵中相同元素取1 b a bc 0 0 0a 0 1 0b 1 0 1a 0 1 0 则对角线最长为公共子串长度step2. 对以上矩阵做累计。若左上角为1,元素累加。 b a bc 0 0 0a 0 1 0b 1 0 2a 0 2 0 则矩阵中,最大的元素为最长公共子串原创 2016-03-15 22:55:46 · 150 阅读 · 0 评论 -
DP(1)
动态规划:从新手到专家凑硬币状态 d(i)表示凑够i元需要的最少硬币数量 状态方程 d(i)=min{ d(i-vjv_j)+1 },其中i-vjv_j>=0,vjv_j表示第j个硬币的面值 #define INF 10000;int Min[100]; int coins[] = { 1,3,5 }; void find_coins(int value) { //初始化 f原创 2016-03-15 16:52:41 · 257 阅读 · 0 评论 -
DP(5)
递归法S(n) : 等于第n个元素与S(n-1)中的每个元素组成集合,外加{n}和全集。复杂度T(n) = 2T(n-1)+2;位运算对N个元素,让每个元素对应N的2进制表示中的一位。某位为0,则不在子集;为1,则在子集中。void subset(int arr[], int len) { int mask = 0, i = 0; int end = (1 << len) - 1;原创 2016-03-15 21:38:44 · 214 阅读 · 0 评论 -
Edit Distance
LeetCode #72. Edit Distance状态:d[i][j]表示A[1~i], B[1~j]之间的编辑距离状态方程: 1. d[0, j] = j; 2. d[i, 0] = i; 3. d[i, j] = d[i-1, j-1]; A[i] == B[j] 4. d[i, j] = min{d[i-1, j-1], d[i, j-1], d[i-1, j]} +1; A[i]原创 2016-03-18 17:09:26 · 208 阅读 · 0 评论