随笔分类 -  BZOJ

摘要:题目传送门 观察数据a*2^b,转化成二进制后,后面跟了b位的0,可以转化为一个分层背包。 先预处理出每个物品是哪一层的,并放在同层内DP。 同层内直接背包,考虑层与层之间的DP。 第一维枚举层数,然后做类似于背包的DP,细节看code。 code: 阅读全文
posted @ 2018-04-14 15:48 Cptraser 阅读(153) 评论(0) 推荐(0)
摘要:题目传送门 看到M<=16经典状态压缩的数据范围,考虑题目。 一道类似于背包的题目。 设f[i][j]表示前i个商店,物品购买状态为j。 先将f[i][j]加上w[i](到i的路费),转移一次,在与同状态的前一商店取min就好了。 code: 阅读全文
posted @ 2018-04-04 10:19 Cptraser 阅读(103) 评论(0) 推荐(0)
摘要:题目传送门 裸的带修莫队。 在Sort时如果左右区间都在同一块中,就按询问的修改的先后Sort。 对于每次查询判断向前或向后修改。 当size为N*2/3时据说是最优。O(N^(3/5))。 code: 阅读全文
posted @ 2018-04-03 19:45 Cptraser 阅读(132) 评论(0) 推荐(0)
摘要:题目传送门 第一次接触CDQ分治,感谢YZ大佬的教导。 CDQ分治就是一种奇特的分治方法,它用左区间的区间信息来更新右区间。 设CDQ(L,R,l,r)表示递归到区间[L,R],区间的值为[l,r]。 mid=l+r/2。 将L~R区间按<=mid和>mid的两块重新分开。 继续递归区间分治。 CD 阅读全文
posted @ 2018-04-03 16:07 Cptraser 阅读(234) 评论(0) 推荐(0)
摘要:题目传送门 数位DP,其实只要求1~A-1和1~B就可以了。两数相减即为答案。 考虑怎们求1~A。 设f[i][j]表示到第i位,为j的windy数总数。 由前一位差值大于1的方程转移。 但是统计答案要分类讨论。 首先设所求数的位数为len。 1~len-1首先加入答案。 第len位的数-1也可以直 阅读全文
posted @ 2018-04-02 14:17 Cptraser 阅读(183) 评论(0) 推荐(0)
摘要:题目传送门 DP。 但要分类讨论,对于M=1和M=2的情况分别讨论。 1>M=1 设f[i][j]表示选了i个矩阵,到第j位。N^3转移。(前缀和) 2>M=2 设f[i][j][k]表示选了i个矩阵,第一列到i,第二列到j。 枚举i,j,k后枚举j1和k1表示选一行的情况。 如果j==k则可以从之 阅读全文
posted @ 2018-04-02 13:52 Cptraser 阅读(127) 评论(0) 推荐(0)
摘要:题目传送门 区间DP,设f[i][j][0/1]为i~j区间的压缩情况,1表示在插入了一个M。 code: 阅读全文
posted @ 2018-03-30 10:14 Cptraser 阅读(133) 评论(0) 推荐(0)
摘要:题目传送门 这道题可以用C++的random_shuffle屮过去。 random数列插入顺序,每次都插入数值和最小的那一组。 #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using names 阅读全文
posted @ 2018-03-29 15:57 Cptraser 阅读(181) 评论(0) 推荐(0)
摘要:题目传送门 LCA,对于每一个(x,y,z),两两求LCA得最优解或求出LCA不同于其他两组的那个为最优解。 code: 阅读全文
posted @ 2018-03-22 20:26 Cptraser 阅读(150) 评论(0) 推荐(0)
摘要:题目传送门 这道题我写IDA*写挂了,TLE+WA,只AC了两个点。 这道题标算BFS+状态压缩。 code: 阅读全文
posted @ 2018-03-20 11:01 Cptraser 阅读(178) 评论(0) 推荐(0)
摘要:题目传送门 这道题可以树链剖分+线段树。 其他操作模板,第二个操作只需要将x~x+size[x]-1区间加值即可。 code: 阅读全文
posted @ 2018-03-20 07:33 Cptraser 阅读(161) 评论(0) 推荐(0)
摘要:题目传送门 树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、SBT、SPLAY、线段树等)来维护每一条链。 以下是几种概念: 常见的路径剖分的方法是轻重树链剖分(启发式剖分) 将树中的边分为:轻边和重边 ž 阅读全文
posted @ 2018-03-19 18:23 Cptraser 阅读(197) 评论(0) 推荐(0)
摘要:题目传送门 平衡树的题。 因为题目给出条件(其实自己也知道):同一时间呆在收养所中的,要么全是宠物,要么全是领养者,这些宠物和领养者的个数不会超过10000个。 所以只要维护一颗平衡树,它的里面要不全是人,要不全是宠物。 找到人的前驱后继比较。 code: 阅读全文
posted @ 2018-03-17 20:25 Cptraser 阅读(215) 评论(1) 推荐(0)
摘要:题目传送门 今天看了分块,顺便把基本的莫队学习了一下。 莫队算法是一种离线算法,复杂度可以达到O((M+N)*Sqrt(N)); 对于询问区间的左端点分块,块内的右端点从小到大排列。 对区间进行偏移操作。 掌握一个思想基础:两个询问之间的状态跳转。如图,当前完成的询问的区间为[a,b],下一个询问的 阅读全文
posted @ 2018-03-16 15:21 Cptraser 阅读(204) 评论(0) 推荐(0)
摘要:题目传送门 网络流,求最小割。 设tot为所有盈利的和,即所有人(不花钱)雇佣。 对于S->i建一条容量为c[i]的边,i->j建一条S[i][j]*2的边,之所以这样建是因为如果不选这个人还会亏S[i][j]。 对于i->T建一条容量为∑S[i][j]的边。 最小割=最大流,跑Dinic code 阅读全文
posted @ 2018-03-16 15:03 Cptraser 阅读(165) 评论(0) 推荐(0)
摘要:题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。 分块修改理论复杂度为O(N/M),M为块的大小,有基本不等式得M=Sqrt(N)时较优。 分块将原数组分为M块,对M块的信 阅读全文
posted @ 2018-03-16 12:00 Cptraser 阅读(255) 评论(0) 推荐(0)
摘要:题目传送门 一道斜率优化的题目。 但暴力方程很关键。 我们先将x作为关键字Sort一遍,再将y处理成单调递减,即把无用的土地去除。 然后单调队列维护凸包做斜率优化就好了。 code: 阅读全文
posted @ 2018-03-13 18:06 Cptraser 阅读(178) 评论(0) 推荐(0)
摘要:题目传送门 暴力直接对于每个点跑一遍二分图匹配,能拿四十分。 然而我们考虑正解。 对于一对Couple我们建♂->♀的一条边,对于一对曾经有恋情的情侣我们建♀->♂的一条边。 跑Tarjan缩点。 判断每一对Couple,如果在同一个强连通分量里,他们就不稳定(即能通过曾经有恋情的关系跑回来)。 c 阅读全文
posted @ 2018-03-13 15:37 Cptraser 阅读(184) 评论(0) 推荐(0)
摘要:题目传送门 一道斜率优化的题目,加深了印象。 设sum[i]=∑p[i],S[i]=∑p[i]*x[i]。 暴力方程加前缀和优化: 然后变形: 求最小截距,因为k单调,所以是个下凸包,单调队列维护。 //红体字在y相减时会抵消,所以无影响。 code: 阅读全文
posted @ 2018-03-12 10:15 Cptraser 阅读(188) 评论(0) 推荐(0)
摘要:题目传送门 这道题可以很快想到暴力DP的做法: 但是数据范围有50000,这就需要用斜率优化了。 我们设S[i]=C[i]+i(C[i]为前缀和),L++,设j为i的最优决策点。。 原方程就变为: 我们设2*S[i]为k。 相当于这题就变成了求最小的截距f[i]。 假设A,B,C,D为四个决策点。 阅读全文
posted @ 2018-03-10 19:48 Cptraser 阅读(184) 评论(1) 推荐(0)