Loading

随笔分类 -  dp

摘要:二维前缀和 求二维前缀和后,能够实现 \(O(1)\) 求原数组二维区间和,但是不支持修改。 ll n, m, sum2[N][N], c[N][N]; void Sum2_pre() { fr(i, 1, n) fr(j, 1, m) sum2[i][j] = sum2[i-1][j] + sum 阅读全文
posted @ 2024-10-10 20:07 EdisonBa 阅读(109) 评论(0) 推荐(0)
摘要:题意简述 给定 \(n \times m\) 的 01矩阵,从中找到最大的正方形和矩形使得 01 交错。 解题思路 采用悬线法。 悬线法 即对于每一行的状态,用一根横着的线左右移动,直到不满足条件或者到达边界为止,线的两端即为符合要求的区间。 定义状态 \(L[i][j]\) 表示从 \((i, j 阅读全文
posted @ 2021-10-15 11:15 EdisonBa 阅读(103) 评论(2) 推荐(1)
摘要:01背包 最大价值 背包数量为 \(V\),有 $n$件物品,重量为 \(w_i\),价值为 \(c_i\)。求能获得最大价值。 ll V, n, w[10000], c[10000], f[10000]; int main() { V = read(); n = read(); for (int 阅读全文
posted @ 2021-06-29 10:15 EdisonBa 阅读(53) 评论(0) 推荐(0)
摘要:LCS 操作对象:两个长度不一定相等的字符串。 例题 string s, t; int f[maxn][maxn]; int main() { cin >> s >> t; int ls = s.length(), lt = t.length(); for (int i = 1; i <= ls; 阅读全文
posted @ 2021-06-29 10:13 EdisonBa 阅读(44) 评论(0) 推荐(0)
摘要:二分 求一个序列的最长上升子序列个数。 本程序采用边读边处理 + 二分法。 ll f[maxn], ans = 1; //注意答案个数初始化为1 int main() { ll n = read(); for (int i = 1; i <= n; ++i) { int x = read(); if 阅读全文
posted @ 2021-06-29 10:11 EdisonBa 阅读(161) 评论(0) 推荐(0)