A fresh start.

题意农场主养了 $M$ 只猫,它们会到 $N$ 座山上去玩,在 $T_i$ 的时候下山。农场主雇了 $P$ 个员工,员工可以在不同的时刻从第 $1$ 座山出发去接猫。求所有猫等待时间和的最小值。$N,M\le 10^5 \ , \ P\le 100$ 。题解用 $t_i$ 表示接第 $i$ 只猫的最早出发时间,显然 $t_i = T_i - D_{H_i}$ ,然后将所有猫按照 $t_i$ ...
题解 动态规划 动态规划-斜率优化DP
省选/NOI-
题意有 $N$ 个数和 $M_1+M_2$ 种关系。前 $M_1$ 种关系 $(x,y)$ 表示 $S_x+1=S_y$ ,后 $M_2$ 种关系表示 $S_x\le S_y$ 。求最多有多少个数字值。如果无解输出 NIE 。$N\le 600 , M_1+M_2\le 100000$ 。题解不等式关系可以先差分约束建图。边 $(x,y)$ 的权值表示 $S_x-S_y$ 的最大值,对于 $...
题解 图论-最短/最长路 图论-差分约束 图论-Tarjan
省选/NOI-
题意有 $N$ 个重量为 $1,2,3$ 的砝码,以知部分砝码之间的重量关系。给出砝码 $A,B$ ,要求另外选出两个砝码 $C,D$,使得 $A+B > , = , < C+D$ ,求三种情况的方案数。$4\le N\le 50$ 。题解可以先预处理出砝码之间差值的范围。令 $S_i$ 为 $i$ 砝码的重量,用 $mx[i][j]$ 表示 $S_i-S_j$ 的最大值,$mn...
题解 图论-差分约束
省选/NOI-
题意在 $N$ 点 $M$ 边的有向无环图中选出最多的点,要求这些点两两之间不能有路径相连。$N\le 200$ ,$M\le 30000$ 。题解路径可达的关系可以通过 $\text{Floyd}$ 传递闭包处理。剩下的问题即转化为:选出最多的点,要求这些点两两没有连边。如果把每个点分裂成两个点,形成二分图,就是标准的最大独立集问题。最大独立集 $= N - $ 最小点覆盖(最大匹配)。#...
题解 图论-二分图
题意给出一个 $N\times N$ 的矩形,每个格子染有 $0..5$ 这 $6$ 种颜色。每次操作可以把左上角格子所在的同色联通块全部染成一种颜色,求把所有格子染成一种颜色至少需要多少种操作?$N\le 8$ 。多组数据,组数 $T\le 20$ 。题解朴素的搜索为每次枚举要染的颜色,染色后继续搜索直到染完。退出的条件为某次染色没有新增的格子。期望得分30。#include<bit...
题解 算法-搜索
省选/NOI-
题意给出一个 $A\times B$ 的矩阵,要求求出一个子矩阵,满足子矩阵中最大值和最小值的差值最大。$A,B\le 1000$ 。题解先对每行用单调队列求出最大/最小值,记录在 $maxx[],minx[]$ 中。然后对这两个数组的每列用单调队列再求出最大/最小值,即可得到答案。#include<bits/stdc++.h> using namespace std; in...
题解 数据结构-单调队列
提高+/省选-
题意多重背包问题。题解单调队列优化多重背包。$$f[i][j] = \max_{k=0}^{num[i]} f[i-1][j-k\times c[i]]+k\times w[i]$$令 $a = j \mod c[i] \ , \ b = \lfloor \dfrac{j}{c[i]} \rfloor $ :$$f[i][j] = \max_{k=b-num[i]}^{b} \{f[i-1]...
题解 动态规划 动态规划-单调队列优化DP
提高+/省选-
题意有 $N$ 个格子,每个格子有权值。最开始每次只能跳 $d$ 格,可以通过改进跳 $d-g..d+g$ 格。求满足能获得最少 $k$ 权值的最小的 $g$ 。$N\le 500000$ 。题解可以对 $g$ 二分答案,然后进行验证。令 $f[i]$ 为前 $i$ 个格子可以获得的最大权值,转移方程式为:$$f[i] = \max_{j=1}^{i-1} f[j]+s[i] \ (d-g\...
题解 动态规划 算法-二分/三分 动态规划-线性DP
提高+/省选-
题意从一个数列中选出一些数,要求不能有超过 $k$ 个连续的数,求这些数的最大和。数列长度 $N\le 100000$ 。题解令 $f[i]$ 表示前 $i$ 个数的最优解,$sum[i]$ 表示前缀和,转移方程式为:$$f[i] = \max_{j=i-k}^i f[j-1] + sum[i] - sum[j]$$$$f[i] = \max_{j=i-k}^i \{f[j-1] - sum...
题解 动态规划 动态规划-线性DP 动态规划-单调队列优化DP
提高+/省选-
题意给出一个 $N$ 点 $M$ 边的有向图,令 $1\rightarrow N$ 的最短路长度为 $d$ ,求 $1\rightarrow N$ 的长度不超过 $d+k$ 的路径条数。多组数据。 $N\le 100000$ ,$M\le 200000$ 。题解先跑一次反向最短路,记 $i\rightarrow n$ 的最短路长度为 $dis[i]$ 。用 $d(i,j)$ 表示 $i\ri...
题解 动态规划 动态规划-图上DP
省选/NOI-
题意给出 $N$ 个砝码,每个砝码的质量至少等于前面两个砝码(也就是质量比它小的砝码中质量最大的两个)的质量的和,求能凑出的 $\le C$ 的重量最大值。$N\le 1000,C\le 2^{30}$ 。题解每个砝码的质量至少等于前面两个砝码的质量的和所以 $N\le 30$ 。。。所以爆搜就行了,拿个前缀和优化剪枝,如果剩下的都能取就直接取完。#include<bits/stdc+...
题解 算法-搜索
省选/NOI-
题意给出一个加法表,一个字母代表一个数字。求加法的进制,以及每个大写字母代表的数字。数字个数 $N\le 8$ 。(行数 $\le 9$)题解结论:一定是 $N$ 进制。每一行有几个二位数,这个数就是几。证明:因为有 $N$ 个不同的数,所以最少 $N$ 进制。假设为 $N+1$ 进制,那么一定有一个数没有出现,假设为 $k$ 。$k=0$ 或 $k=1$,而 $1+N=10$ ,矛盾。$1...
题解 算法-搜索
提高+/省选-
双倍经验:洛谷2687 逢低吸纳,全部改成 double 就可以水过。题意求最长下降子序列的长度和个数。如果两个序列的值相同,则认为这两个序列相同,只算一个。序列长度 $N\le 5000$ 。题解长度很好求,用 $f[i]$ 表示以 $i$ 结尾的最长下降子序列的长度:$$f[i] = \max_{j=1}^{i-1} f[j]+1 \ (s[j] > s[i]) \tag{1}$...
题解 动态规划 动态规划-线性DP
提高+/省选-
开始爆肝题解题意给出一个 $N$ 进制加法的竖式,一个大写字母代表一个数字。求每个大写字母代表的数字。$N\le 26$ 。题解直接爆搜。从右往左一次搜各个竖排,如果搜到就退出。要开 O2 并且优化搜索顺序(就是把每个竖排的第一个数倒叙搜索,可以通过分析数据点得出)才能过,而且 #9 刚好 $1000ms$ ,真是刺激。#include<bits/stdc++.h> using...
题解 算法-搜索
提高+/省选-