摘要:
每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选且只选择一个该行块里的一个海面对应的列块。 c++ include include include 阅读全文
摘要:
n SAT 是给定多个条件,问是否有一个赋值方式使所有条件得到满足。 每个条件都有n个变量, 而2 SAT 是存在时间复杂度为$O(nm)或O(n+m)$的做法($m$是条件数)的算法的问题。 2 SAT往往是判断是否有方案使条件得到满足的一个算法。 建图: 求解2 SAT问题,需要转移到图上,对于 阅读全文
摘要:
"题目" 首先分析数据范围发现m很大,所以线性做法肯定不行,因此考虑倍增,即预处理出每个点跳1次后的位置。然后只用两个数组类似于快速幂,推出每个点跳m次后的位置。 预处理离每个点第k小的点,可以用长度为k的尺子尺取。 c++ include include include include inclu 阅读全文
摘要:
"题目" 该题目可以用辅助数组l[i], r[i]来指向以data[i]为最小值的左端点和右端点。然后最后枚举每个data[i]寻找每个data[i]的美丽值的最大值。 然后辅助数组可以用单调栈求出。 c++ include include include include include inclu 阅读全文
摘要:
"题目" 先判断是否有解,然后开两个栈,分别存进入递归时间复杂度为O(1)的变量,和时间复杂度为O(n)的变量,最后取最大值。 include using namespace std; int T; int tong[1000100]; stack s, s2; int main() { // fr 阅读全文
摘要:
"题目" DP,及DP的优化。 这个题显然是一个DP,状态也比较好定义, 定义dp[i]表示双方总共取i个数时,所得到的最大差值。 然后可以得出状态转移方程,即 $dp[i]=max(data[j] dp[j 1]);j define N 1010010 define int long long u 阅读全文