上一页 1 2 3 4 5 6 7 8 ··· 27 下一页
摘要: 传送门 解题思路 m:菜数 n:原料数 当 m=n-1 时:最小的跟最大的两两结合。 当 m>=n 时:最大的单独做,最后就变成了 m=n-1 的情况。 当 m=n-2 时:将每个物品减去k后做01可行性背包,可以使用 bitset 优化。 具体证明可以看这里:题解 P6775 【[NOI2020] 阅读全文
posted @ 2021-10-15 15:15 尹昱钦 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 推荐博客:扶苏的bitset浅谈 笔记: 定义时可以赋值 bitset<10> b(8);bitset<1005> b(string("01010101")) 会分别存储为0000001000、0001010101 函数 b.to_ulong() 和 b.to_ullong() 会把b里面的数转化为 阅读全文
posted @ 2021-10-15 09:42 尹昱钦 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 今晚csp报名网站炸了QAQ,发布新闻者禁三警告 先考虑暴力dp: O(na)的想必大家都会,但一遍都做不下来。 所以需要换一种dp。 假设求序列[l……r]的答案。 先将其排序,假设到第i-1位时能表示出来的范围为[1..x],则只要判断第i位是否大于x+1即可。 若小于x+1, 阅读全文
posted @ 2021-10-12 21:41 尹昱钦 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 线段树维护区间最长连续0的长度。 板子。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include 阅读全文
posted @ 2021-10-12 16:53 尹昱钦 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 被细节卡了一上午wwww 很好地一道题,考察了AC自动机的本质。 先考虑如何暴力做:枚举y中的每一位,并不断跳fail,若跳到了x,则ans++。 如何优化这个过程呢? 先离线根据y从小到大排序。 当我们以0为根节点,fail[now]向now连边时,AC自动机就变成了一颗树。这时 阅读全文
posted @ 2021-10-12 14:56 尹昱钦 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 对于这种求次短路的题,很常见的套路是先求出以起点和终点作为源点到其他各点的单源最短路,然后枚举每一条边,可以发现次短路一定是重复经过某一条边或者走了这条不在最短路中的边。分类讨论即可。 注意本题中有重边和自环,且计算度时,重边算一次,自环也算。 AC代码 #include<iost 阅读全文
posted @ 2021-10-12 08:57 尹昱钦 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 设dp[i]为先i位能否被理解。 然后在AC自动机上匹配,若 num[j]&&dp[i-cnt[j]] 则 dp[i] 等于 1。(j为不断fail的指针) AC代码 #include<iostream> #include<cstdio> #include<cstring> #in 阅读全文
posted @ 2021-10-11 20:55 尹昱钦 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先对所有的string跑一遍AC自动机。 用sum表示到达一个节点的收益,可以在求fail时顺便继承着fail节点的sum值。 然后在这个AC自动机上做dp即可。 设dp[i][j]为第i步走到AC自动机上的j号节点的最大分数,枚举转移到的点数转移即可。 AC代码 #include 阅读全文
posted @ 2021-10-11 19:46 尹昱钦 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 来pyyz过掉的第一题祭 一开始在前来个模板上改了改,发现T飞了。 看一下题解发现,因为标记不会清空,所以会被卡到O(ST)。 于是考虑优化。 因为AC自动机本质上是一个有向无环图,所以考虑每次更新答案时只更新到当前节点,最后拓扑排序遍历一遍图统计答案即可。 复杂度降到了O(S+T 阅读全文
posted @ 2021-10-11 15:59 尹昱钦 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 传送门(简单版) 传送门(加强版) AC自动机 推荐阅读:洛谷日报 讲的真的很好。 我没法再说的更好了。 甚至我的板子都是照着他的敲的。 加强版 说是加强版,实际上只需更改一下num数组表示的含义:从当前点有几个模式串结尾,改成以当前点结尾的模式串的编号。 在查询过程中也不需要清空num标记。 注意 阅读全文
posted @ 2021-10-10 23:53 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 看出是区间dp,但是就是不会设计状态,不会写状态转移方程/kk/kk 设dp[i][j][k]表示区间i到j加上左面连续k个a[i]的答案。 最后答案即为dp[1][n][0]。 状态转移分为两种情况: 让前k个和第i位连起来处理:dp[i+1][j][0]+w[k+1] 枚举断点 阅读全文
posted @ 2021-10-10 16:57 尹昱钦 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 观察到n非常小,所以考虑状压dp。 问题在于如何确定一个没有后效性的状态/状态转移方程。 设dp[i][j]表示当前已经选择了的行的集合为i(一个二进制数),上一个选择的行是第j行的不考虑首行和末行的答案。 首先转移可以通过提前预处理两行之间的代价优化到O(1)。而首行的选择实际上 阅读全文
posted @ 2021-10-10 14:29 尹昱钦 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先将u和v二进制拆分,然后从低位向高位考虑。 然后就是大力分类讨论: 当某一位u是1且v是1时,要求这一位有奇数个1且前面有偶数个进位 当某一位u是1且v是0时,要求这一位有奇数个1且前面有奇数个进位 当某一位u是0且v是1时,要求这一位有偶数个1且前面有奇数个进位 当某一位u是0 阅读全文
posted @ 2021-10-10 00:10 尹昱钦 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先不考虑砝码质量相等的情况,设dp[i][j][k]表示前i个砝码选j个组成重量为k的方案数。 最后判断是否合法就从判断方案数是否为1,变成了是否等于C(cnt,i)。(cnt为某个数字的数量,i表示选取的数量)。 可以滚动掉一维数组。 最后一定要记得特判数字类型只有一种或两种的情 阅读全文
posted @ 2021-10-09 19:41 尹昱钦 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 简单版传送门 困难版传送门 解题思路 单调队列优化dp板子题。 但是要注意一开始把dp数组初始化成极小值。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> # 阅读全文
posted @ 2021-10-09 17:10 尹昱钦 阅读(33) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 27 下一页