09 2017 档案

摘要:传送门 这种鬼畜的状压DP。。。第一次见 看到 0 <= Bi <= 7 就应该想到状态压缩,然而此题实在太鬼畜,想到也没什么乱用 f[i][j][k]表示前i-1个人全部吃完,i~i+7的人的吃饭状态为j,最后一个吃饭的人和i距离为k 因为有可能第i个人及以后的人都好没有吃,最后一个吃饭的人是前i 阅读全文
posted @ 2017-09-29 15:29 zht467 阅读(142) 评论(0) 推荐(0) 编辑
摘要:传送门 注释写明了一切 阅读全文
posted @ 2017-09-29 11:21 zht467 阅读(134) 评论(0) 推荐(0) 编辑
摘要:传送门 t(i,j)表示下标从i到j的数 d[i]表示以i结尾的最小的数的下标 d[i]=max(j) (1<=j<=i && t(d[j-1],j-1)<t(j,i)) 这样从1到n一遍DP可以求出末尾最小的数 f[i]表示以i开头的最大的数的下标 f[i]=max(j) (i<=j<=n && 阅读全文
posted @ 2017-09-29 09:17 zht467 阅读(328) 评论(2) 推荐(1) 编辑
摘要:传送门 orz不会做。。。 一个好理解的做法(n^3*k): 分n=1和n=2两种情况考虑。 n=1时,预处理出前缀和sum[]。 设f[i][j]为到达第i格,已经放了j个子矩阵的最大和, 那么每次先把f[i][j]的值设为f[i-1][j](第i个元素不属于第j个子矩阵) 剩下的情况就是第i个元 阅读全文
posted @ 2017-09-28 19:30 zht467 阅读(156) 评论(0) 推荐(0) 编辑
摘要:传送门 首先先从小到大排序,如果没有重复的元素,直接一个一个往上填即可,每一个数就等于当前行和列的最大值 + 1 如果某一行或列上有重复的元素,就用并查集把他们连起来,很(不)显然,处于同一行或列的相同元素始终应该保持一样的,然后再一个一个往上填 阅读全文
posted @ 2017-09-28 15:40 zht467 阅读(194) 评论(0) 推荐(0) 编辑
摘要:传送门 BZOJ没数据范围。。。 其实数据范围是这样的。。 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举区间,最大 31*n*n 想到枚举每一位也就离正解不远了,可以dp, 对于xor有贡献的是区间xor 阅读全文
posted @ 2017-09-28 08:11 zht467 阅读(170) 评论(0) 推荐(0) 编辑
摘要:传送门 总之可以先预处理出来每个位置最多往上延伸多少 枚举两行,看看夹在这两行中间的列最大能构成多大的矩形 可以看出,必须得在一个两行都没有X的区间才有可能构成最大的答案 那么可以把这些区间处理出来,在看看这些区间中的点最左边和最右边的能从下面那一行向上延伸到上面那一行的点,更新ans即可 阅读全文
posted @ 2017-09-26 16:55 zht467 阅读(138) 评论(0) 推荐(0) 编辑
摘要:传送门 每个队之间是独立的 f[i][j]表示当前队伍前i个题答对j个的概率 满足条件的概率 == 全部方案(除去答对0)的概率 - 不满足条件的概率(每个队伍答对1~n-1) 阅读全文
posted @ 2017-09-22 21:21 zht467 阅读(136) 评论(0) 推荐(0) 编辑
摘要:传送门 逆推 只不过顺序还是顺着的,思想是逆着的 f[i][j]表示还剩下i张红牌,j张黑牌的期望值 那么边界是 f[i][0]=i,因为只剩i张红牌 f[0][j]=0,只剩黑牌,显然直接停止最优 f[i][j] = max(0,i/(i+j)*f[i-1][j]+j/(i+j)*f[i][j-1 阅读全文
posted @ 2017-09-22 21:16 zht467 阅读(145) 评论(0) 推荐(0) 编辑
摘要:传送门 可以预处理出每种颜色的上下左右的位置,这样就框出来了一个个矩形,代表每种颜色分别涂了哪里。 然后用二维的差分。 就可以求出来每个位置至少涂了几次,如果 > 1 的话,就肯定不是先涂的, 如果是1的话,并且不是只有一种颜色,那么也有可能是先涂的, 如果只有一种颜色,并且 n != 1,那么一定 阅读全文
posted @ 2017-09-21 20:25 zht467 阅读(296) 评论(0) 推荐(0) 编辑
摘要:传送门 发现就是逆序对 可以树状数组求出 对于旋转操作,把一个序列最后面一个数移到开头,假设另一个序列的这个数在位置x,那么对答案的贡献 - (n - x) + (x - 1) 阅读全文
posted @ 2017-09-21 17:37 zht467 阅读(223) 评论(0) 推荐(0) 编辑
摘要:传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, 也就是说在两个i之间只有一个j那么对答案的贡献为1,所以可以用树状数组,当第一次出现一个数的时候,那个位置+1 阅读全文
posted @ 2017-09-21 15:03 zht467 阅读(173) 评论(0) 推荐(0) 编辑
摘要:传送门 f[i][j]表示当前第i个,且最后一个位置连接到j 第一维可以省去,能连边的点可以预处理出来,dp可以用线段树优化 阅读全文
posted @ 2017-09-21 14:59 zht467 阅读(148) 评论(0) 推荐(0) 编辑
摘要:传送门 把每个点和曼哈顿距离距离它3步或1步的点连一条边,边权为3 * t + a[x][y] 因为,走3步,有可能是3步,也有可能是1步(其中一步拐了回来) 最后,把终点和曼哈顿距离距离它1步和2布的点连一条边,边权为 步数 * t 跑一边spfa即可 阅读全文
posted @ 2017-09-21 11:14 zht467 阅读(187) 评论(0) 推荐(0) 编辑
摘要:传送门 网上的题解: 枚举左端点,二分右端点位置,最后所有左端点的答案取最小值 我的题解。。。 二分答案,枚举左端点,看看是否有解。。 好像和上面是反的,但是思路没问题 过程用hash判重 阅读全文
posted @ 2017-09-21 10:07 zht467 阅读(278) 评论(0) 推荐(0) 编辑
摘要:传送门 按照时间t排序 如果 t[i] + map[i][j] <= t[j],就在i和j之间连一条边 然后spfa找最长路 阅读全文
posted @ 2017-09-20 20:50 zht467 阅读(198) 评论(1) 推荐(0) 编辑
摘要:传送门 良心题解 阅读全文
posted @ 2017-09-20 19:14 zht467 阅读(183) 评论(0) 推荐(0) 编辑
摘要:传送门 f[i][j]表示前i个物品,容量为j的方案数c[i][j]表示不选第i个物品,容量为j的方案数两个数组都可以压缩到一维 那么f[i][j] = f[i - 1][j] + f[i - 1][j - w[i]] (不放i与放i) c数组的转移分多种情况 1.j < w[i]时,说明当前物品放 阅读全文
posted @ 2017-09-20 14:51 zht467 阅读(119) 评论(0) 推荐(0) 编辑
摘要:传送门 1.树形DP 2.贪心 如果一个点的孩子节点或父亲节点有放,那么这个点就不用放了,如果这个点的儿子节点都没放,并且这个点和父亲节点也没放,那么就放在父节点上,ans++ 阅读全文
posted @ 2017-09-19 16:16 zht467 阅读(117) 评论(0) 推荐(0) 编辑
摘要:传送门 这个题的方法好像很多啊 1.莫队暴力 2.线段树 + 离线处理 先预处理出sg[i]表示前i个数的sg值,next[i]表示i的下一位置在哪里,如果后面再没有i,那么next[i] = n + 1 然后把线段树的每个叶子节点放上sg[i]。 把询问按照左端点由小到大排序,我们考虑如何从 l 阅读全文
posted @ 2017-09-19 10:29 zht467 阅读(130) 评论(0) 推荐(0) 编辑
摘要:传送门 开2个树状数组 一个存的是下标,一个存的是数量 细节。。。看标称吧,懒得说了,好气啊 阅读全文
posted @ 2017-09-16 06:48 zht467 阅读(148) 评论(0) 推荐(0) 编辑
摘要:传送门 好难的题。。至少对我来说。 这题就是模拟从最低的平台注水,然后将最低的填满以后从最低的平台向两边扩展,每次找最近的最低的平台h,然后将水填到h高度。 栈里存的是向外扩展的时候,有时会遇到高度递减的情况,这时并不能填水,但要把这些高度都递减(即扩展时的顺序)记录进栈,然后遇到一个比比水面高的平 阅读全文
posted @ 2017-09-15 15:19 zht467 阅读(313) 评论(0) 推荐(0) 编辑
摘要:传送门 题中重要信息,每堆草的数量都不一样。 可以思考一下,什么情况下才会出现矛盾。 1.如果两个区间的最小值一样,但是这两个区间没有交集,那么就出现矛盾。 2.如果两个区间的最小值一样,并且这两个区间有交集,那么这个最小值一定在交集中,但是如果这个交集被某个最小值较大的区间,或是一些最小值较大的区 阅读全文
posted @ 2017-09-15 08:53 zht467 阅读(313) 评论(0) 推荐(0) 编辑
摘要:传送门 AC自动机加DP就不说了 注意到 m <= 10,所以模式串很少。 而 n 很大就需要 log 的算法,很容易想到矩阵。 但是该怎么构建? 还是矩阵 A(i,j) = ∑A(i,k) * A(k,j),那么i到j的方案数就是j到k的方案数称k到j的方案数,那么直接矩阵快速幂即可 阅读全文
posted @ 2017-09-14 20:11 zht467 阅读(192) 评论(0) 推荐(0) 编辑
摘要:传送门 和bzoj1030一个德性 阅读全文
posted @ 2017-09-14 17:33 zht467 阅读(120) 评论(0) 推荐(0) 编辑
摘要:模板1 模板2 阅读全文
posted @ 2017-09-14 14:17 zht467 阅读(157) 评论(0) 推荐(0) 编辑
摘要:传送门 由于困难值小于等于x这个很恶心,可以离线处理,将边权,和询问时的x排序。 每到一个询问的时候,将边权小于等于x的都合并起来再询问。 。。 有重复元素的线段树合并的时间复杂度是nlog^2n 阅读全文
posted @ 2017-09-14 08:28 zht467 阅读(211) 评论(0) 推荐(0) 编辑
摘要:传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳定。。。但hzwer都用这种方法水过。。 正解好像是平衡树+启发式合并,以后学TT 阅读全文
posted @ 2017-09-13 21:09 zht467 阅读(166) 评论(0) 推荐(0) 编辑
摘要:传送门 此题很有意思,有多种解法 1.用天天爱跑步的方法,进入子树的时候ans-query,出去子树的时候ans+query,query可以用树状数组或线段树来搞 2.按dfs序建立主席树 3.线段树的合并 前两个都会,于是学习一下线段树的合并。。 道理用文字解释不清。。。直接看代码就能看懂。。 可 阅读全文
posted @ 2017-09-13 19:46 zht467 阅读(190) 评论(0) 推荐(0) 编辑
摘要:传送门 有个结论,每一个位置修改高度后的数,一定是原来在这个数列中出现过的数 因为最终结果要么不递增要么不递减, 不递增的话, 如果x1 >= x2那么不用动,如果x1 < x2,把x1变成x2的代价最小 不递减同理 输入数组a后,把a数组复制一份放到b中,并将b排序 f[i][j]表示前i个,当前 阅读全文
posted @ 2017-09-13 17:07 zht467 阅读(157) 评论(0) 推荐(0) 编辑
摘要:传送门 看到前缀就要想到字典树! 看到前缀就要想到字典树! 看到前缀就要想到字典树! 阅读全文
posted @ 2017-09-13 15:40 zht467 阅读(174) 评论(0) 推荐(0) 编辑
摘要:传送门 先用tarjan缩点,再记忆话搜索一下 阅读全文
posted @ 2017-09-13 14:48 zht467 阅读(109) 评论(0) 推荐(0) 编辑
摘要:传送门 思想有点像蚯蚓那个题 来自洛谷的更简便的题解 阅读全文
posted @ 2017-09-13 09:27 zht467 阅读(252) 评论(0) 推荐(0) 编辑
摘要:传送门 线段树区间修改傻题 阅读全文
posted @ 2017-09-13 08:29 zht467 阅读(274) 评论(0) 推荐(0) 编辑
摘要:传送门 dis[i][j]表示第i个点,更新了j次的最短路 此题不良心,卡spfa 阅读全文
posted @ 2017-09-12 19:59 zht467 阅读(158) 评论(0) 推荐(0) 编辑
摘要:传送门 可以看出 第一天买,第三天卖 == 第一天买,第二天卖完再买,第三天卖 所以我们只考虑前一天买,后一天卖即可 那么有按天数来划分 f[i][j]表示前i天,共有j元,最大的盈利 第一维可以省去 那么有两种选择,不买 或者 前一天买,后一天卖 阅读全文
posted @ 2017-09-12 19:00 zht467 阅读(184) 评论(0) 推荐(0) 编辑
摘要:传送门 蒟蒻我原本还想着跑两边spfa,发现不行,就gg了。 首先这道题卡spfa,所以需要用堆优化的dijkstra求出最短路径 因为题目中说了,保证最短路径有且只有一条,所以可以通过dfs求出最短路径树 发现,需要给这课树加边,才能有别的路径到达一个点x 那么我们连接树上两个节点u,v,边权为w 阅读全文
posted @ 2017-09-12 15:41 zht467 阅读(144) 评论(0) 推荐(0) 编辑
摘要:传送门 DP f[i][j]表示前i个中选j个的最优解 预处理g[i][j]表示选i~j对答案的贡献 那么就可以n^3乱搞了! 注意边界 阅读全文
posted @ 2017-09-12 09:03 zht467 阅读(177) 评论(0) 推荐(0) 编辑
摘要:传送门 告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点 那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的。 阅读全文
posted @ 2017-09-12 08:00 zht467 阅读(245) 评论(0) 推荐(0) 编辑
摘要:传送门 把任务按照d排序 一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大, 就从堆中弹出一个数,再把当前的数放进去 阅读全文
posted @ 2017-09-11 21:42 zht467 阅读(165) 评论(0) 推荐(0) 编辑
摘要:传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可以不用从小到大排序 阅读全文
posted @ 2017-09-11 17:39 zht467 阅读(253) 评论(0) 推荐(0) 编辑
摘要:传送门 还是一个字——栈 然后加一大堆特判 至少我是这么做的 我的代码 看了题解 发现预处理出来每种颜色最左边和最右边的位置会更好处理 如果两种颜色有交集,直接输出-1 题解代码 5 1 2 1 2 1 这组数据,我输出-1,题解输出2 好像题解错了,但因为数据水,所以,你懂的 阅读全文
posted @ 2017-09-11 15:54 zht467 阅读(310) 评论(0) 推荐(0) 编辑
摘要:传送门 树状数组裸题 阅读全文
posted @ 2017-09-11 14:51 zht467 阅读(194) 评论(0) 推荐(0) 编辑
摘要:传送门 以 1,2,n 为起点跑3次 bfs 或者 spfa 那么 ans = min(ans, dis[1][i] * B + dis[2][i] * E + dis[3][i] * P) (1 <= i <= n) 阅读全文
posted @ 2017-09-11 14:20 zht467 阅读(154) 评论(0) 推荐(1) 编辑
摘要:传送门 manacher...... 先跑一边manacher是必须的 然后枚举双倍回文串的对称轴x 把这个双倍回文串分成4段,w wR w wR 发现,只有当 y <= x + p[x] / 2 && y - p[y] <= x 时,y最大才是最优解 也就是y在第三段,并且以y为中心的回文串要扩展 阅读全文
posted @ 2017-09-11 09:12 zht467 阅读(167) 评论(0) 推荐(0) 编辑
摘要:传送门 某篇好文章 阅读全文
posted @ 2017-09-10 19:02 zht467 阅读(145) 评论(0) 推荐(0) 编辑
摘要:Matrix67的矩阵专题 阅读全文
posted @ 2017-09-10 07:55 zht467 阅读(187) 评论(0) 推荐(0) 编辑
摘要:传送门 排序! 阅读全文
posted @ 2017-09-09 15:26 zht467 阅读(153) 评论(0) 推荐(0) 编辑
摘要:传送门 用bitset优化,要不然n^3肯定超时 消元过程中有几点需要注意,找到最大元后break,保证题目中所说的K最小 如果有自由元说明解很多,直接返回 阅读全文
posted @ 2017-09-08 21:18 zht467 阅读(152) 评论(0) 推荐(0) 编辑
摘要:传送门 题意:给出n个集合(n<=1000),每个集合中最多有10000个数,每个数的范围为1~10000,给出q次询问(q<=200000),每次给出两个数u,v判断是否有一个集合中同时含有u,v两个数 枚举每一个集合,看看是否同时又u和v,显然超时 用bitset维护每一个数所在集合,求解的时候 阅读全文
posted @ 2017-09-08 19:54 zht467 阅读(242) 评论(4) 推荐(1) 编辑
摘要:传送门 先进行高斯消元 因为要求最少的开关次数,那么: 对于关键元,我们可以通过带入消元求出, 对于自由元,我们暴力枚举,进行dfs,因为只有开关两种状态,0或1 阅读全文
posted @ 2017-09-08 17:22 zht467 阅读(198) 评论(0) 推荐(0) 编辑
摘要:传送门 高斯消元解异或方程组 小Ho在游戏板上忙碌了30分钟,任然没有办法完成,于是他只好求助于小Hi。 小Ho:小Hi,这次又该怎么办呢? 小Hi:让我们来分析一下吧。 首先对于每一个格子的状态,可能会对它造成影响的是其自身和周围4个格子,这五个格子被按下的总次数也就等于该格子所改变的总次数。 对 阅读全文
posted @ 2017-09-08 15:38 zht467 阅读(299) 评论(0) 推荐(0) 编辑
摘要:传送门 关于高斯消元的具体过程 详见百度经验 模板 阅读全文
posted @ 2017-09-08 11:46 zht467 阅读(139) 评论(0) 推荐(0) 编辑
摘要:传送门 矩阵快速幂,本质是floyd 把 * 改成 + 即可 注意初始化 因为只有100条边,所以可以离散化 阅读全文
posted @ 2017-09-08 08:33 zht467 阅读(246) 评论(0) 推荐(0) 编辑
摘要:传送门 本题主要是构造矩阵,我们只需要把那一段式子看成两个前缀和相减, 然后就直接矩阵连乘。 直接对那个k+1阶矩阵快速幂即可,注意初始化矩阵为单位矩阵,即主对角线(左上到右下)都为1其他都为0。 另外,很多量要开long long。 阅读全文
posted @ 2017-09-07 21:22 zht467 阅读(155) 评论(0) 推荐(0) 编辑
摘要:传送门 k < 20 k这么小,随便dp一下就好了。。。 dp[i][j][k]表示从i到j经过k个点的方案数 4重循环。。 但是如果k很大就不好弄了 把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点 阅读全文
posted @ 2017-09-07 19:15 zht467 阅读(175) 评论(0) 推荐(0) 编辑
摘要:传送门 可知 f[i] = f[i - 1] + f[i - 2] + ... + f[i - k] 直接矩阵优化就好了 阅读全文
posted @ 2017-09-07 17:50 zht467 阅读(264) 评论(0) 推荐(0) 编辑
摘要:传送门 1.模拟 easy 2.矩阵优化 详见 Matrix67 阅读全文
posted @ 2017-09-07 16:24 zht467 阅读(155) 评论(0) 推荐(0) 编辑
摘要:传送门 预处理cost[i][j]表示从第i天到第j天起点到终点的最短距离 f[i]表示前i天到从起点到终点的最短距离 f[0] = -K f[i] = min(f[i], f[j - 1] + cost[j][i] + K) 阅读全文
posted @ 2017-09-06 10:20 zht467 阅读(154) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示