合集-Acwing
摘要:序列:可以不连续,但与原数列当中出现的先后顺序要相同; 上升子序列: 需要满足单调性 - 单调递增 算法1 (贪心+二分) O(nlogn) 时间复杂度 二分查找一个数的最小的最大值 O(logn); 一共有 n 个数进行二分 O(nlogn); 贪心 分析样例: 7 3 1 2 1 8 5 6 1
阅读全文
摘要:**(区间DP) ** 0.思路 关键点:最后一次合并一定是左边连续的一部分和右边连续的一部分进行合并 如何分类:最后一次分界线的位置来分类,分成k类之后,每一类取最小代价 步骤: 1.枚举[l,r]区间的长度 2.对于每个长度的区间 枚举起点———— 合并开始的位置 for(int i = 1;i
阅读全文
摘要:算法1 (线性DP) $O(n^2)$ 1.状态定义 f[i][j] : 所有将a[1 ~ i] 变成 b[1 ~ j]的操作方式的操作次数的最小值 2.状态计算: 如何分类: 分类方式一般考虑的是最后一步 a的前i个字母,b的前j个字母,共有三种操作; 1.删除:a[1 到 i - 1] == b
阅读全文
摘要:先看题目要求 算法1 (并查集维护关系) 1.由题意可知只有三种动物,三种动物之间的关系是循环的(由于是环形),可以通过对3取模来判断是哪一种关系 2.可以利用并查集维护这三种动物值间的关系,也就是说集合表示的是每一个点到根节点的距离 因此需要一个数组,记录每一个点到根节点的距离,从而可以推断出任意
阅读全文
摘要:方法1:完全背包法 1.状态定义: f[i][j]: 表示只从1 ~ i中选,且总体积恰好为j的方案数 #include <bits/stdc++.h> using namespace std; const int N = 1010, MOD = 1e9 + 7; int n; int f[N];
阅读全文
摘要:算法1 (贪心) 题目要求牛的最大伤害值最小,那么我们使每头牛的伤害值最小,在其中找最大值作为答案 如何使得每头牛的伤害值最小? (1) 自身w值越大应该放到底部,使得被减数减小 (2) 自身s值越大应该放到底部,使得减数变大 综上,w + s 从小到大排序,最大的危险系数一定是最小的。 贪心算法的
阅读全文
摘要:题意: 给定一个长度为$n$的数列,请你求出数列中每个数的二进制表示中 $1$ 算法1 (lowbit()) 0.预备知识 1.原码:符号位加上真值的绝对值 2.反码:正数的反码是其本身,负数的反码是在其原码的基础上符号位不变,其余各个位取反。 3.补码:正数的补码就是其本身,负数的补码是在其反码的
阅读全文
摘要:题目链接 算法1 (数字三角性模型) 这道题是摘花生 题目的延申 摘花生:走一条路 这道题与摘花生题的区别在于走的路数,该题走两条路,而且是两条路同时走的思想。 那么按照摘花生的题的思路,能否两条路各自取最大值呢? 答案是不行。 因为第一次摘花生,第一次的最优解已经影响到第二次的最优解了。两次分开走
阅读全文

浙公网安备 33010602011771号