09 2018 档案

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