09 2018 档案
摘要:"题目链接" Solution 完全背包 $dp$ , 同时再加一个数组 $v[i][j]$ 记录当总和为$j$ 时第 $i$ 种物品是否被选. 为保证从小到大和字典序,先将瓶子按大小排序. 然后按部就班转移,要注意讨论字典序问题.转移看代码. Code cpp include define N 3
阅读全文
摘要:"题目链接" Solution 乍一看发现正着 DP,有明显的后效性,所以就反过来做. 但是同时发现很显然减去多的放后面明显更优,所以按 $R$ 从大排序. 然后 $f[i][j]$ 代表前 $i$ 个选了 $j$ 个的最大价值. 转移方程: $$f[i][j]=max(f[i 1][j],f[i
阅读全文
摘要:"题目链接" Solution 斜率优化$DP$. 今天下午才打的第一道题 QwQ... $90$ 分很简单,一个简单的递推. 令 $f[i]$ 为最后一天旅游的花费, $g[i]$ 为最后一天吃饭的花费. 转移很简单: $f_i=min(f_i,g_j+p (i j)^2);$ $g_i=min(
阅读全文
摘要:题目链接 Solution 最小割,但是要求割边最少的最小的割. 所以要用骚操作... 建边的时候每条边权 \(w = w * (E+1) + 1;\) 那么这样建图跑出来的 \(maxflow\) 为原图 \(maxflow\) 的 \(E+1\) 倍加上割边数量. 割边数量很显然就是 \(max
阅读全文
摘要:"题目链接" Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 $(i,j)$ 往上 $n$ 的最大值和最小值. 然后再横着做一遍单调队列即可. Code cpp include define in(x) x=read(); define ll long long de
阅读全文
摘要:"题目链接" Solution 转化一下,就是个单调队列. 可以发现就是一段区间 $[L,R]$ 使得其高度的极差不小于 $d$ ,同时满足 $R L$ 最小. 然后可以考虑二分然后再 $O(n)$ 判断, 时间复杂度 $O(nlogn)$ . Code
阅读全文
摘要:"题目链接" Solution 尺取法板子,算是复习一波. 题中说最多删除 $k$ 种,那么其实就是找一个颜色种类最多为 $k+1$ 的区间; 统计一下其中最多的颜色出现次数. 然后直接尺取法,然后每次对于 $col[r]$ 进行统计,时间复杂度 $O(n)$ . Code cpp include
阅读全文
摘要:欧拉路径 & 欧拉回路 概念 欧拉路径 : 如果图 G 种的一条路径包括所有的边,且仅通过一次的路径. 欧拉回路 : 能回到起点的欧拉路径. 混合图 : 既有无向边又有无向边的图. 判定 无向图 一个无向图存在欧拉路径,当且仅当 该图所有点度数为偶数 或者 仅有两个点度数为奇数,其余全为偶数. 有向
阅读全文
摘要:"题目链接" Solution 贼有意思的 DP, 也可以用组合数学做. $f[i][j]$ 代表前 $i$ 位,有 $j$ 个 $1$ 的方案数. 转移方程很简单 : $f[i][j]=f[i 1][j]+f[i 1][j 1]$ 然后可以按位判断答案上是否为 $1$ . 如何判断? 如果当前 $
阅读全文
摘要:"题目链接" Solution 似乎就是个很简单的最长不上升子序列输出方案. 但是有一个很艹蛋的条件: 不同方案选择价格必须不同. 且其股票价格不保证不相同. $f[i]$ 代表以第 $i$ 天结尾的不上升子序列的长度. 其实我们可以推出一个条件 : 相同的两个股票价格同时出现,后者的方案里面一定包
阅读全文
摘要:"题目链接" Solution 搜索+DP. 刚好把搜索卡死的数据范围... 然后应该可以很容易想到枚举行的情况,然后分列去DP. 行的情况直接全排列即可,复杂度最高 $O(C_{16}^{8})$. 然后分列进行 DP, $f[i][j]$ 代表以 $i$ 为结尾,选了 $j$ 个的答案. 之后就
阅读全文
摘要:"题目链接" Solution 我只会60分暴力... 正解是 DP. 状态定义 : $f[i][j]$ 代表 $1$ 到 $i$ 比最短路长 $j$ 的方案数. 那么很显然最后答案也就是 $\sum^{i=0}_{k}f[n][i]$. 转移方程 : 对于任一状态 $f[i][j]$ 我们对可以到
阅读全文
摘要:"题目链接" Solution 很巧妙的 DP。 可以看这里的 "题解" 。 比我自己讲要好的多。 Code cpp include using namespace std; int n,p,f[2][5000]; int main() { cin n p; bool t=0; f[t][1]=1;
阅读全文
摘要:"题目链接" Solution 用栈进行模拟. 记录一个 $map$ 来看循环变量有没有用过. 对于每一次入栈都加信息. 出栈直接将 $top$ 减一下. 反正一堆乱七八糟的东西瞎搞... 注意条件 如果循环内均为常数,算作 $O(1)$ . Code cpp include using names
阅读全文
摘要:"题目链接" Solution 我DP太菜啦... 考虑到一棵二叉树是由根节点以及左儿子和右儿子构成。 所以答案其实就是 左儿子方案数 右儿子方案数 。 状态定义: $f[i][j]$ 代表深度为 $i$ ,节点个数为 $j$ 的二叉树方案数。 转移方程: 对于每一个状态,节点总数已经确定。 那么枚
阅读全文
摘要:"题目链接" Solution 比较恶心的搜索,思路很简单,直接广搜找联通块即可. 但是细节很多,要注意的地方很多.所以直接看代码吧... Code cpp include int mp[52][52],n,m,cnt; int v[52][52],col[52][52]; int siz[2508
阅读全文
摘要:"题目链接" Solution 大概是个裸题. 可以考虑到,如果原图是一个有向无环图,那么其最大半联通子图就是最长的一条路. 于是直接 $Tarjan$ 缩完点之后跑拓扑序 DP就好了. 同时由于是拓扑序DP,要去掉所有的重边. Code cpp include define ll long lon
阅读全文
摘要:"题目链接" Solution 可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险. 那么对警察造成威胁的就是那些 身份不明且不能从其他点转移过来的点. 那么大部答案就是缩完点之后入度为 $0$ 的联通块数量. 但是,会有特殊情况: 如图,我们就只要查 $2$ 或者 $1$
阅读全文
摘要:"题目链接" Solution $Tarjan$ 缩点乱搞. 考虑到环内如果有一个被打开,那么也就全部打开了. 然后很显然入度为 $0$ 的点需要被砸破. 所以缩点之后找到入度为 $0$ 的即可. Code cpp include using namespace std; const int max
阅读全文
摘要:"题目链接" Solution 差分约束乱搞就好了. 需要注意的地方: 对于大于等于的直接联等于,应为等于,因为对于我满足条件而言,等于总是最好的. 对于等于的,注意要建双向边. 然后要开 $long~long$ . 然后按照套路搞就是了. Code cpp // luogu judger enab
阅读全文
摘要:"题目链接" Solution 差分约束. 差分约束似乎精髓就两句话: 当我们把不等式整理成 $d[a]+w=d[b]$ 时,我们求最短路。 所以对于本题的式子 $Ti Tj \leq b$ 可以写成: $T_i b \leq T_j$. 然后就从 $i$ 向 $j$ 连一条 $ b$ 的边然后跑最
阅读全文
摘要:"题目链接" Solution 有几点关键,首先,可以证明次小生成树一定是由最小生成树改变一条边而转化来. 所以需要枚举所有非最小生成树的边$(u,v)$.并且找到 $u$ 到 $v$ 的边中最大边和次大边. 为什么要找次大边呢?? 因为可能最大边与要替换的边长度相等,那么这种条件生成的便不是严格的
阅读全文
摘要:"题目链接" Solution 直接维护一个差分的线段树就好了. 其中线段树的节点代表 $r$ 比 $l$ 多多少. Code cpp include define ll long long define mid (l+r)/2 using namespace std; const int maxn
阅读全文
摘要:"题目链接" Solution 裸的最小生成树. Code cpp include using namespace std; const int maxn=500008; struct sj{int to,fr,w;}a[maxn]; bool cmp(sj x,sj y) {return x.w'
阅读全文
摘要:"题目链接" Solution $Trie$ 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个有两个子节点的点; 将 $siz$ 较小的点中的值放到 $siz$ 较大的子树中去查询即可. 时间复
阅读全文
摘要:"题目链接" Solution $Kruskal$ 加一点点东西就好... $n$ 很小,可以暴力搞出所有的边. 然后按照边的大小排序. 用一个并查集维护关系. 同时记录联通块的数量,大于 $k$ 的时候照样维护关系. 如果已经等于 $k$ ,直接找到第一条两端点不在同一联通块的边输出就好. Cod
阅读全文
摘要:"题目链接" Solution 基本上就是个板子. 因为 $n$ 很小,只有 $2000$,所以直接暴力建图,然后跑最小生成树就好了. Code cpp include define ll long long using namespace std; const int maxn=2008; str
阅读全文
摘要:"题目链接" Solution 裸题诶... 直接 $Tarjan$ 缩点+ $SPFA$ 最长路即可. 不过在洛谷上莫名被卡... RE两个点... Code cpp include define ll long long using namespace std; const int maxn=2
阅读全文
摘要:"题目链接" Solution 分块+$Dijkstra$. 难点在于建边,很明显 $O(n^2)$ 建边会挂一堆 . 那么考虑一下, $n^2$ 建边多余的是哪些东西 $???$ 很显然是冗杂的边,即两个点在之前已经可以互达了,但是在这一次仍然又连接一遍. 所以我们对于 $n$ 个点 都开 $sq
阅读全文

浙公网安备 33010602011771号