09 2017 档案
摘要:题目链接 见题解: feilongz。 这里只放代码。
阅读全文
摘要:题目链接 话说还真没见过能影响两行的状压。想了半天想出来f数组再多一维就能表示,但是没想到怎么才能不爆空间…… 也是从这道题里学到的一个妙招。 可以把合法状态存到一个数组里,然后用数组下标来映射状态。感觉好强啊 然后……这题差不多就完了。
阅读全文
摘要:题目链接 这题的状态转移方程真是粗鄙。 f[i][j][k]表示前i行用了j个矩阵状态为k的时候的最大值。 k=0:两列都不选。 k=1:取左弃右。 k=2:选右弃左。 k=3:左右都选,但分属于两个独立矩阵。 k=4:左右都选,且同属于一个矩阵。 参考题解:孤寂的时代 代码
阅读全文
摘要:题目链接 GuessYCB的题解讲的很棒。就这样。 因为这题我不会,而题解又讲的太全太详细太好了。
阅读全文
摘要:题目链接 这题真是恶心死我了。 由于位运算每一位互不干涉,所以贪心由大到小选择每一位最优的解,但是要判断一下边界,如果选择该解使得原数>m则不能选择。 代码如下
阅读全文
摘要:题目链接 倍增LCA是个什么蛇皮原理啊,循环完了还得再往上跳一次才能到最近公共祖先 合着我昨天WA两次就是因为这个 建最大生成森林,因为图不一定是联通的,所以不一定是一棵树。这个地方用克鲁斯卡尔就好了 然后给这个森林跑一遍DFS,顺便倍增 然后对于每个询问跑LCA,倍增的时候已经顺便求出了最小边权,
阅读全文
摘要:题目链接 真是可恶,被数据范围坑了一把。想要一遍AC的希望破灭了…… 以后大家在做状压DP的时候一定要开long long…… 设f[i][j][k]表示考虑前i行,总共放了j个King,第i行状态为k时的方案数。 先统计出k的二进制位有多少1,记为len,然后枚举o(1~(1<<n)-1),则状态
阅读全文
摘要:题目链接 (突然高兴 又一次瞬间想出转移方程并一遍A掉!!233333(虽然从二叉苹果树那题开始我就发现我的方程好像跟别人不大一样 (所以这样就可以名正言顺的水题解了 设f[i][j][k]表示考虑FJ出的前i个手势,Bessie变了j次之后,用k表示的手势到目前为止赢了FJ的最多次数。 则考虑FJ
阅读全文
摘要:题目链接 这题恶心死我了。 bfs染色,统计每个联通块两色的个数,ans加它们的最小值。
阅读全文
摘要:题目链接 区间DP,因为中序遍历的性质:区间[l,r]的任何一个数都可以是该区间的根节点。 更新权值的时候记录区间的根节点,最后DFS输出。 见代码。
阅读全文
摘要:题目链接 SovietPower 的题解讲的很清楚。Map或Hash映射后用nlogn求出LIS。这里只给出代码。
阅读全文
摘要:题目链接 设f[i][j]表示以节点i为根的子树在状态j的情况下的最优解。 j有两种情况。 j=1:i这个根节点有士兵在站岗。 j=0:i这个根节点没有士兵在站岗。 转移方程很好想。 这样子。 意思就是:如果根节点已经有人站岗了,那么它的直接子节点可站可不站。就从子节点的两种状态中选一个小的。 如果
阅读全文
摘要:题目链接 枚举极大子矩形。详情请见本题题解:I_AM_HelloWord 代码如下
阅读全文
摘要:题目链接 设f[i][j][k]表示给以i为根节点的子树分配j条可保留的树枝名额的时候,状态为k时能保留的最多苹果。 k有三种情况。 k=1:我只考虑子树的左叉,不考虑子树的右叉,此时子树能保留的最多的苹果。 k=2:我只考虑子树的右叉,不考虑子树的左叉,此时子树能保留的最多的苹果。 k=3:我既考
阅读全文
摘要:题目链接 二分最长的电话线长度。把所有大于这个长度的边权设成1,小于等于的设成零,然后跑SPFA看dis[n]是否>k。若>k则l=mid+1 否则r=mid-1 放代码
阅读全文
摘要:参见ZHT467的题解。 f[i]表示在i这个集合下的最少分组数和当前组最少的容量。 从1到(1<<n)-1枚举i,对于每个i枚举它的子奶牛,然后重载运算符计算。 代码如下
阅读全文
摘要:题目链接 看了题解之后突然发现这题简直是水题。然而不看题解就想不出来。为什么呢? len(x)=log10(x)+1 于是二分寻找x。
阅读全文
摘要:题目链接 突发奇想可以用f[i]表示智商和为i的时候情商最大是多少。这样就变成了一个背包问题。 最后更新答案的时候从0到最大背包容量遍历,最后答案是最大的i+f[i]; 但是虽然答案只能从0到m里选,转移过程中是不能丢掉负数体积的。这是因为人家题目只说了要最后的智商和不能小于零,情商和不能小于零,没
阅读全文
摘要:题目链接 本题使用拓扑排序来规划DP顺序。设s[i][j]表示i步是否能走到j这个点,e[i][j]表示i步是否能走到j这个点——用第二条路径。因为要满足无后效性和正确性,只有第i个点已经全部更新完毕的时候才能用它来更新其他的点。所以用拓扑。 代码如下
阅读全文
摘要:神祇与人三则 一. 世界因疏于管理而日渐荒芜。恶在地上行走,如同地上的瘟疫四处传播。放眼望去,凡看在眼中的人大多跟从恶。有人认为这创世的神祇是纵使恶在地上行,于是恼怒,得了力量来攻伐神祇的居所。 有海底的游鱼游过来对人说:“我在海底见过那神殿,有贝壳做成的房顶和珊瑚制成的柱子。”人听说神殿潜在海底,
阅读全文
摘要:题目链接 写代码能力需要极大提升。我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维。枚举所有“最小点”,然后看它往左往右最大能扩展多少。 维护一个单调递增的序列,弹栈时就会是这种情况: 设被弹出去的元素是s,那它为什么会被弹出去呢?因为它比当
阅读全文
摘要:题目链接 设f[i][0]表示第i个人不去舞会时子树的最大欢乐度,f[i][1]表示第i个人去舞会时子树的最大欢乐度。 则有状态转移方程:f[i][0]+=∑max(f[to][0],f[to][1]) f[i][1]+=∑f[to][0] 其中to是i的所有直连子节点。 初始化:f[i][1]=第
阅读全文
摘要:题目链接 导致我WA十几遍的原因居然是最大值不够大……以后再也不相信memset(dis,127/3,sizeof(dis))了。 此题先将花费排序,然后二分最大花费,spfa判断解是否可行。spfa的时候遇到一个大于当前二分的花费的点就跳过。如果起点的点权超过了这个花费,或者最后到达n时的最短路径
阅读全文
摘要:六月想写一部架空的世界史,设定是个可以设置法则的高魔世界。我的确动笔了,写完了时间开始之前、创世纪,还有神话纪元的开头。 然而今天我才发现…… 我三个纪元都写挂了。我把一个本来不应该有任何属性的概念写成了具有“存在”属性的实物;我想写一个类似我一样的,超然于整个世界之外的神祇,结果构思不当写成了世界
阅读全文
摘要:TM搞了半天的二维DP方程还是错的。 这是题目链接: 设f[i]表示前i辆车顺利通过的最小时间。 则对于每一个i枚举该组车的起点j,然后从所有的f[j]+Min[j][i]中选一个最小的。 Min[j][i]表示从第j辆车到第i辆车最慢的是个什么速度。
阅读全文
摘要:做顺序DP做惯了,死活没想到这是个倒序DP。 f[i]表示时刻i的最大空闲时。有以下两种可能。 1.时刻i没有任务。此时f[i]=f[i+1]+1; 2.时刻i有许多任务。此时f[i]=max(f[i+持续时间s)。 改进了一下题解。不用排序,直接链式前向星建图!哈哈哈! 代码
阅读全文
摘要:题目链接 我DP是真的菜啊啊啊啊啊! f[i][j]表示考虑前i个数,有i-j+1个数组成一个上升子序列,且不以i结尾的尾端最小值。 设a为j个数组成的序列,且以i结尾;b为i-j+1个数组成的序列,且不以i结尾。 从f[i][j]到f[i+1][j+1]的转移如下: 若a后面可以接上第i+1个数,
阅读全文
摘要:题目链接 不得不说attack是个天才。读入使用异或运算,令que[i][j]^=(i^j)&1,于是原题目变成了求que数组的最大相同值。 然而我还是不理解为啥,而且就算简化成这样我也不会做。 ai,我太菜了。 f[i][j]表示考虑到i,j为止的最大值。当que[i][j]=que[i-1][j
阅读全文
摘要:题目链接 感觉自己DP好烂啊 道道看题解 钦定1为根,DFS搜索子树权值。如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉。最后在所有节点的权值中寻找最优解。 这就是DFS。第一行是个记忆化,如果f[x]已经被计算过返回。但我写错了…… 然后 f[x]+=que[x]。因为f[x]是节点
阅读全文
摘要:233今天蒟蒻我连文化课都没听光想着这个了 然后我调了一下午终于过了!!! 一看数据范围似乎是状压,然而216等于65536。开一个65536*65536的二维数组似乎不太现实。 所以Rqy在四月还是几月给我们讲这道题的时候说要半DFS半DP,时间复杂度O(2n*n3) 怎么个半DFS半DP法呢?
阅读全文
摘要:题目链接 首先来介绍欧拉函数。 设欧拉函数为f(n),则f(n)=1~n中与n互质的数的个数。 欧拉函数有三条引论: 1.若n为素数,则f(n)=n-1; 2.若n为pa,则f(n)=(p-1)*(pa-1)。 3.若gcd(a,b)=1,则f(a*b)=f(a)*f(b)。 下面代码给出欧拉函数的
阅读全文
摘要:题目链接 首先介绍两个定理。 整数唯一分解定理:任意正整数都有且只有一种方式写出素数因子的乘积表达式。 \(A=(p1k1 p2k2 ...... pnkn \) 求这些因子的代码如下 for(int i=2;i*i<=a;++i){ if(!(a%i)){ prime[++num]=i; whil
阅读全文
摘要:题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍。 ——信息学奥赛之数学一本通 避免侵权。哈哈。 两只青蛙跳到一格才行,所以说 \(x+mt=y+nt(mod l) \) \((x-y)+(m-n)t=0(m
阅读全文
摘要:这题真TM的趣味。 可以说我的动手能力还是不行,想到了算法却写不出来。以后说自己数论会GCD的时候只好虚了…… 我们首先这么想。 x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x和a0不会再有除了1之外的公约数。 证明:设x/a1=c,a0/a1=d. 若有gcd(c,d)=y
阅读全文
摘要:题目链接 从n的元素中选零个,选一个,选两个,选三个...选n个的方案数和,其实就是n个元素中取任意多个元素的方案数,那对于每一个元素,都有取或不取两种情况,所以方案数最终为2^n个。
阅读全文
摘要:题目链接 此题使用DP。设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况。所以先枚举k,再枚举i和j。 代码如下
阅读全文
摘要:题目链接 数据范围这么小,难度又这么大,一般就是状态压缩DP了。 对输入进行处理,二进制表示每一行的草地状况。如111表示这一行草地肥沃,压缩成7. 所以f[i][j]表示第i行状态为j时的方案数 状态j指的是一个二进制集合,有牛在吃草的位置是1,不再吃草的位置是0 f[i][j]=Sum(f[i-
阅读全文
摘要:题目链接 老天……终于碰上一个除了模板之外的LCA题了 这道题用Tarjan来LCA。树上两个点的路径是唯一的,所以钦定一个根,两点间的路径就是两点到根的路径减去双倍的公共祖先到根的路径。大概很好理解。
阅读全文
摘要:题目链接 此题使用BFS记录最短路的条数。思路如下:因为是无权无向图,所以只要被BFS到就是最短路径。因此可以记录该点的最短路和最短路的条数:如果点y还没被访问过,则记录dis[y],同时令ans[y]=ans[x]. 如果点y已经被访问过且当前为最短路径,则ans[y]+=ans[x]
阅读全文
摘要:题目链接在这里 这题和虫食算比较类似。做完这道题可以去做虫食算。都是搜索一类的题。 这样 我们分析题目可以发现进制只可能是字母的个数,也就是n-1。为什么? 因为题目要求完整的加法表才算数。如果进制低于n-1,字母就多了;如果进制高,字母就不够,凑不出一个完整的加法表。所以这题第二问比第一问简单很多
阅读全文
摘要:按照国际惯例先发题目链接 woc从4月就开始做这sb题。最开始30分升到65分不管了,直到最近几天升到85分,再到今天AC。激动的心情自然是那些一遍就A或者一小时以内就A的神犇难以想象的。 下面说说主要几个分段。 # 35分 按题意用堆模拟。每次暴力修改蚯蚓长度,于是get皮肤:TLE蓝。 # 6
阅读全文
摘要:题没什么好说的,因为是模板题。求值我用的是dfs。 不能直接在原图上dfs,因为原图上有环的话会发生一些滑稽的事情。所以我们要用Tarjan缩点。因为此题点权全为正,所以如果在图上走一个环当然可以全走一遍,结果当然是更优的。于是可以把环当成一个点来dfs,把它们的点权都加起来当成一个大点。 然后就是
阅读全文
摘要:题目链接 此题是并查集。考虑到水位不断上涨,所以将时间倒转。先统计最后一天的联通块个数,每一天浮出水面的块进行计算。复杂度O(玄学)。 代码如下
阅读全文
摘要:照例良心题目链接 此题使用f[i][j]表示前i束花放进前j个花瓶的时候的最大值。转移方程如下 f[i][j]=max(f[i][j-1],f[i-1][j-1]+que[i][j]) 其中que[i][j]表示第i束花放进第j个花瓶里的情况。有这个转移方程的原因是,每一束花在每一个花瓶里的情况只有
阅读全文
摘要:YEAH!我也是一个AC主席树模板的人了! 其实是个半吊子 我将尽量详细的讲出我的想法。 主席树太难,我们先搞普通线段树好了 普通线段树怎么做?我的想法是查询K次最小值,每次查完把查的数改成INF,查完再改回来。。。 MDZZ 于是就有了主席树。 先不考虑主席树,我们来考虑一个奇特的线段树。 一般的
阅读全文
摘要:题目链接在此 此题一开始写了个深搜,过了30%的数据,也就是n<=10的那一段。。。。 然后看了题解发现这是个二分图的判断。 我们先举例子找到不能放进一个栈里的规律。设有数列【2,3,1,4】 容易模拟得到这个数列单栈是搞不出来的。为什么搞不出来呢? 如果输入的序列是单调递减的,自然一个栈可以搞定。
阅读全文
摘要:我发现现在没了题解我做普及提高+的题也做不了 更不要说这些提高+难度的题 此题是一个二维DP。暴力是三重循环ijk,k枚举在i位置上的点击次数。即 for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) for(int k=1;j-k*up[i]>0;k++) f[
阅读全文
摘要:题目链接在此 其实我看到这道题一点想法都没有 设f[i][j][k]表示用2i秒能不能从j走到k。如果可以,那j到k就可以一秒走到,它们的路径长度就是1。方程为f[i][j][k]=f[i-1][j][l]&&f[i-1][l][k]。 最后在图上跑一遍Floyd。复杂度O(n3)。 代码如下
阅读全文
摘要:题目链接在此 有环当然一定尽量走环,这是搞缩点的人都知道的常识。 建了新图之后搞点权SPFA跑最长路。枚举每个酒吧选择最大值。 发现我的博客写的越来越水了
阅读全文
摘要:我不会做贪心题啊……贪心题啊……题啊……啊…… 我真TM菜爆了啊…… 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序。然后维护一个查询最大值的线段树。对于一个区间[l,r],如果这个区间已经有的最大值为s,那么这个区间最多还能装下c-s头奶牛。 当然奶牛数量没那么多的话我也是没有办法 最
阅读全文

浙公网安备 33010602011771号