摘要:
二分图(1) 1.例题:染色法判断二分图 题目描述 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 $n$ 和 $m$。 接下来 m 行,每行包含两个整数 $u$ 和 $v$,表示点 $u$ 和点 $v$ 之间存在一条边。 阅读全文
摘要:
Dijkstra 算法(2) 1.例题 题目描述 给定一个 $n$ 个点 $m$ 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出 $1$ 号点到 $n$ 号点的最短距离,如果无法从 $1$ 号点走到 $n$ 号点,则输出 −1。 输入格式 第一行包含整数 $n$ 和 $m$。 阅读全文
摘要:
计数类DP 1.经典例题——整数划分 一个正整数 n 可以表示成若干个正整数之和,形如:$n=n_1+n_2+…+n_k$,其中 $n_1≥n_2≥…≥n_k,k≥1$。 我们将这样的一种表示称为正整数 $n$ 的一种划分。 现在给定一个正整数 $n$,请你求出 $n$ 共有多少种不同的划分方法。 阅读全文
摘要:
区间DP 1.区间DP简介 区间型动态规划是线性动态规划的拓展,它将区间长度 作为阶段,长区间的答案与短区间有关。 在求解长区间答案前需先将短区间答案求出。 区间型动态规划的典型应用有石子合并、乘积最大等。 2.经典例题:石子合并 题目描述 在一个操场上一排地摆放着 $N$ 堆石子。现要将石子有次序 阅读全文
摘要:
线性DP(下) 1.经典例题(4):编辑距离 题目描述 设 $A$ 和 $B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种: 1、删除一个字符; 2、插入一个字符; 3、将一个字符改为另一个字符。 对任意的两个字符串 $A$ 和 $B$,计算出将字符串 阅读全文
摘要:
线性DP(中) 1.经典例题(3):最长公共子序列 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列 $X=<x_1,x_2,…,x_m>$,则另一序列 $Z= <z_1,z_2,…,z_k>$是X的子序列是指存在一个严格递增的下标序列 $<i_1,i_2,…,i_k> 阅读全文
摘要:
线性DP 1.线性DP简介 线性DP这类动态规划问题的状态一般是一维的f[i],第i个元素的 最优值只与前i-1个元素的最优值(正推)或第i+1个元素 之后的最优值(倒推)有关。 2.经典例题(1):数字金字塔 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最 阅读全文
摘要:
完全背包问题 1.完全背包问题介绍 有 $N$ 种物品和一个容量是 $V$ 的背包,每种物品都有无限件可用。 第 $i$ 种物品的体积是 $v_i$,价值是 $w_i$。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 2.完全背包问题例题 有 $N$ 种物品和一个容量是 阅读全文
摘要:
Kruskal 算法 1.Kruskal 算法介绍 最小生成树: 给定一张边带权的无向图 $G=(V,E)$,其中 $V$ 表示图中点的集合,$E$ 表示图中边的集合,$n=|V|$,$m=|E|$。 由 $V$ 中的全部 $n$ 个顶点和 $E$ 中 $n-1$ 条边构成的无向连通子图被称为 $G 阅读全文
摘要:
Prim 算法 1.Prim 算法介绍 最小生成树: 给定一张边带权的无向图 $G=(V,E)$,其中 $V$ 表示图中点的集合,$E$ 表示图中边的集合,$n=|V|$,$m=|E|$。 由 $V$ 中的全部 $n$ 个顶点和 $E$ 中 $n−1$ 条边构成的无向连通子图被称为 $G$ 的一棵生 阅读全文