
动态规划
动态规划
墨染&殇泪
这个作者很懒,什么都没留下…
展开
-
acwing算法基础课:区间DP(石子合并)
区间DP:石子合并设有N堆石子排成—排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为1352,我们可以先合并1、2堆,代价为4,得到452,又合并1,2堆,代价为9,得到92,再合并得到11,总代价为4+9+11=24;如果第二步是先合并2,3堆,则代价为7,得到47,最后原创 2021-11-11 17:07:18 · 244 阅读 · 0 评论 -
acwing算法基础课:线性DP(最长公共子序列)
线性dp:最长公共子序列给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。#include <iostream>using namespace std;const int N = 1010;int n, m;char a[N], b[N];int f[N][N];int main(){ cin >> n >> m; cin >> a + 1 >> b + 1; for(原创 2021-11-09 19:43:14 · 164 阅读 · 0 评论 -
acwing算法基础课:线性DP(最长上升子序列)
线性dp:最长上升子序列给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。#include <iostream>using namespace std;const int N = 1010;int n;int a[N], f[N];int main(){ cin >> n; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= n; i+原创 2021-11-08 19:49:43 · 140 阅读 · 0 评论 -
acwing算法基础课:线性DP(数字三角形)
线性dp:数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。73 88 1 02 7 4 44 5 2 6 5#include <iostream>using namespace std;const int N = 1010, INF = 1e9;int n;int a[N][N];int f[N][N];int main(){ cin原创 2021-11-06 22:44:04 · 145 阅读 · 0 评论 -
acwing算法基础课:背包问题(分组背包问题)
分组背包问题有N组物品和一个容量是V的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vij,价值是 wij,其中i是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。#include <iostream>using namespace std;const int N = 110;int n, m;int v[N][N], w[N][N], s[N];int f[N];int main(){原创 2021-11-05 20:14:23 · 199 阅读 · 0 评论 -
acwing算法基础课:背包问题(多重背包问题)
多重背包问题有N种物品和一个容量是V的背包。第i种物品最多有si 件,每件体积是vi,价值是wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。#include <iostream>using namespace std;const int N = 110;int n, m;int v[N], w[N], s[N];int f[N][N];int main(){ cin >> n >> m; f原创 2021-11-03 20:45:08 · 208 阅读 · 0 评论 -
acwing算法基础课:背包问题(完全背包问题)
完全背包问题有N种物品和一个容量是V的背包,每种物品都有无限件可用。第i种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。#include <iostream>using namespace std;const int N = 1010;int n, m;int v[N], w[N];int f[N][N];int main(){ cin >> n >> m; fo原创 2021-11-02 19:50:13 · 178 阅读 · 0 评论 -
acwing算法基础课:背包问题(01背包)
01背包问题有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。#include <iostream>using namespace std;const int N = 100;int n, m;int v[N], w[N];int f[N][N];int main(){ cin >> n >> m; for(原创 2021-11-02 19:06:58 · 181 阅读 · 0 评论