摘要:
编辑距离 例题 给定 n 个长度不超过 10 的字符串以及 m 次询问,每次询问给出一个字符串和一个操作次数上限。 对于每次询问,请你求出给定的 n 个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。 每个对字符串进行的单个字符的插入、删除或替换算作一次操作。 输入格式 第一 阅读全文
摘要:
最短编辑距离 题干 给定 n 个长度不超过 10 的字符串以及 m 次询问,每次询问给出一个字符串和一个操作次数上限。 对于每次询问,请你求出给定的 n 个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。 每个对字符串进行的单个字符的插入、删除或替换算作一次操作。 输入格式 阅读全文
摘要:
求最长公共子序列长度 题干 给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M。 第二行包含一个长度为 N 的字符串,表示字符串 A。 第三行包含一个长度为 M 的字符串,表示字符串 B。 字 阅读全文
摘要:
二分法 分析 大神的视频讲解链接 常见的查找边界问题: 最不易出错的解法: 初始l、r设为数组边界两端分别往外扩展一个单位,这样可以保证数组长度只有1位或其它情况时不会陷入死循环。 伪代码: // 以数组int a[N]为例,实际数据所在下标为0~N-1 l = -1, r = N; while l 阅读全文
摘要:
求最长子序列——贪心法 思路: 维护一个数组 stk,要求这个数组里的元素在数值上是严格递增的。 遍历每一个数,如果这个数比数组里的最后一个数更大,那么就将这个数插入数组的最后;反之,替换掉数组中第一个大于等于这个数的元素。 最后的答案就是数组中元素的个数。 分析: 外部循环遍历n个数,时间复杂度为 阅读全文
摘要:
废话不多说,代码如下: #include<bits/stdc++.h> using namespace std; const int N = 1010; int a[N], f[N]; int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n 阅读全文
摘要:
数字三角形 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。(下面排列看起来可能有点不准确) 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 借用最简单的动态规划的思想来考虑 阅读全文
摘要:
分组背包问题 问题描述: 有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 分析: f[i][j]表示只看前i 阅读全文
摘要:
多重背包 II —— 二进制优化 核心思想:转换成0~1背包问题。———— 对个体拆分后全部打散,反正能够保证从全局上使得所有情况依然存在就可以了。 核心思想**(前提建议先把多重背包朴素版算法搞清楚)** 转换成0 ~ 1背包问题,对个体拆分后全部打散,反正能够保证从全局上使得所有情况依然存在就可 阅读全文
摘要:
多重背包问题 I 问题描述: 有 N 种物品和一个容量是 V 的背包。 第 ii 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 跟前面的背包问题解题思路差不多,相比较于完全背包问题多出的限制条件是这 阅读全文