NOIP前 基础动态规划模板
来源:互联网 发布:sql server桌面图标 编辑:程序博客网 时间:2024/05/21 09:29
/*created by scarlyw基础动态规划模板 */#include <bits/stdc++.h>//0/1背包 namespace bag_0_1 {//O(n * m) ans为最大可行价值 const int MAXN = 2000;int n, m, ans;int w[MAXN], c[MAXN], f[MAXN];inline void solve() {std::cin >> m >> n;for (int i = 1; i <= n; ++i) std::cin >> w[i] >> c[i]; for (int i = 1; i <= n; ++i)for (int j = m; j >= w[i]; --j)f[j] = std::max(f[j], f[j - w[i]] + c[i]);for (int i = 1; i <= m; ++i) ans = std::max(ans, f[i]);std::cout << ans;}}//完全背包 namespace bag_tot {// O(n * m) ans为最大可行价值const int MAXN = 2000;int n, m, ans;int w[MAXN], c[MAXN], f[MAXN];inline void solve() {std::cin >> m >> n;for (int i = 1; i <= n; ++i) std::cin >> w[i] >> c[i]; for (int i = 1; i <= n; ++i)for (int j = w[i]; j <= m; ++j)f[j] = std::max(f[j], f[j - w[i]] + c[i]);for (int i = 1; i <= m; ++i) ans = std::max(ans, f[i]);std::cout << ans;}}//最长公共子序列 namespace longest_common_subsequence {//O(n ^ 2)最长公共子序列,f[i][j]表示匹配到s[i], t[j]的lcs const int MAXN = 2000;int f[MAXN][MAXN];char s[MAXN], t[MAXN];inline void lcs() {std::cin >> s + 1 >> t + 1;int lens = strlen(s + 1), lent = strlen(t + 1);for (int i = 1; i <= lens; ++i)for (int j = 1; j <= lent; ++j)f[i][j] = std::max(std::max(f[i - 1][j], f[i][j - 1]), f[i - 1][j - 1] + (s[i] == t[j]));std::cout << f[lens][lent];}}//最长上升序列 namespace longest_increasing_subsequence {//树状数组求最长上升序列O(nlogn) const int MAXN = 100000 + 10;const int MAXX = 10000 + 10;struct binary_indexed_tree {int bit[MAXX + 10];inline int lowbit(int i) {return i & -i;}inline void add(int i, int x) {for (; i <= MAXX; i += lowbit(i)) bit[i] = std::max(bit[i], x);}inline int query(int i) {int ans = 0;for (; i; i -= lowbit(i)) ans = std::max(ans, bit[i]);return ans;}//solve返回长度 inline int solve() {int n, x, t;std::cin >> n;for (int i = 1; i <= n; ++i)std::cin >> x, add(x + 1, query(x) + 1);return query(MAXX);}} bit;//二分求最长上升序列O(nlogn) int n, x, len, pos;int lis[MAXN];inline int find(int x) {int l = 0, r = len + 1;while (l + 1 < r) {int mid = l + r >> 1;if (lis[mid] < x) l = mid;else r = mid;}return l + 1;}//输出为序列长度 inline void solve() {std::cin >> n, memset(lis, 127, sizeof(lis));for (int i = 1; i <= n; ++i) {std::cin >> x, pos = find(x);if (lis[pos] > x) lis[pos] = x, len = std::max(len, pos);}std::cout << len;}}
阅读全文
0 0
- NOIP前 基础动态规划模板
- NOIP前 基础算法模板
- NOIP前 基础数学模板
- NOIP前 基础字符串模板
- NOIP前 基础图论模板
- 动态规划的基础模板
- noip动态规划总结
- NOIP专题复习——专题二:动态规划基础
- [NOIP模拟][动态规划]permut
- [NOIP模拟][动态规划]hello
- NOIP模拟 table 动态规划
- [NOIP模拟][动态规划]Table
- 动态规划 -- 动态规划基础
- noip复赛前的模板整合
- 动态规划 模板
- 动态规划总结【模板】
- 动态规划模板
- 【动态规划】【背包模板】
- 休闲食品招商有骗局吗?如何辨别
- [Oracle 11g r2(11.2.0.4.0)]RAC集群SCAN IP介绍
- 设计模式(22)——模板方法 Template Method
- python异常
- Jquery each的使用及demo
- NOIP前 基础动态规划模板
- 无需一行代码就能搞定机器学习的开源神器
- 一文读懂深度学习与机器学习的差异
- Pytorch还是Tensorflow?英伟达工程师帮你总结了
- 提高代码阅读能力的7种方法
- 如何成为一名无人驾驶工程师
- AI 工程师职业指南 | 《程序员》11 月精彩内容
- 设计模式(23)——访问者 Visitor
- PS笔记