摘要: n<=100000个杆,给高度,增加高度代价为增加量的平方,通过增加使得sigma (a[i]-a[i-1])*C,2<=i<=n的值最小。 f[i][j]--前i根杆第i根高度j的最大值,f[i][j]=min(f[i-1][k]+C*|k-j|+(j-a[i])2),过不了。 把绝对值拆掉,就有 阅读全文
posted @ 2017-08-28 16:55 Blue233333 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 给出n个节点m条边无向图,炸弹从1开始走,有p/q的概率爆炸,否则等概率移到别的点求在每个点爆炸概率f[i,j]-第j秒到点i的概率 W=p/q 则f[i,j]=sigma(1-W)/D[i]*f[k,j-1]其中D[i]为点i的度,k与i有连边Ans(i)=W(f[i,0]+f[i,1]+f[i, 阅读全文
posted @ 2017-08-28 12:54 Blue233333 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 每月m<=1000块钱,有n<=300道题,要按顺序做,每月做题要花钱,花钱要第一个月预付下个月立即再付一次,给出预付和再付求最少几个月做完题,第一个月不做。 神奇的DP。。竟没想出来。。 注意到这个月做题受制于上个月做的题,f[i][j]--最后做i~j题的最少月数,f[i][j]=inf(i~j 阅读全文
posted @ 2017-08-27 20:26 Blue233333 阅读(182) 评论(0) 推荐(0) 编辑
摘要: n<=5000个点m<=10000条边的无向图,求最少加几条边使它变成边双联通图,就是任意两点间都有至少2条边不相交的路径。 tarjan缩点,答案是叶子节点数/2向上取整。 不过要注意这里的“叶子节点数”是指度数为1的点,并不是最后那棵树以某个点为根的叶子节点树。如果找叶子点数一定要以某个点为根, 阅读全文
posted @ 2017-08-26 17:04 Blue233333 阅读(226) 评论(0) 推荐(0) 编辑
摘要: n<=5000个数0或1,每次可以连续对固定长度区间取反,目标把所有1变0,求一个取反区间的固定长度K使取反次数最少。 答案关于K不单调,因此枚举K,对每个K扫一遍区间,遇到1就把连续K个数反转,看最后K-1个数是否在这样一番操作后都为0。为什么?不知道。 区间取反后查询,用差分。n2可过。 1 # 阅读全文
posted @ 2017-08-26 14:40 Blue233333 阅读(192) 评论(0) 推荐(0) 编辑
摘要: n<=3000个点m<=20000条无向边的图,有p<=n个出发点,每个出发点都不可拆,现拆一些点使每个出发点都不能到达点1,求最小点数。 简单的最小割。每个点拆成两个x和y,无向边A--B即Ay->Bx,By->Ax,每个点拆成的x和y再连边容量1,然后建超级源向p个点连边,最大流,没了。 错误。 阅读全文
posted @ 2017-08-26 14:07 Blue233333 阅读(243) 评论(0) 推荐(0) 编辑
摘要: m<=4000条关系描述n<=1000个事件,每条关系描述了一个或语句表示“x事件发生或不发生”或“y事件发生或不发生”,求每个事件是必发生、必不发生还是都行,无解输出IMPOSSIBLE。 是一个2-SAT问题。建图后把每个事件发生不发生都dfs一遍即可。听说缩点后会更快,就写了个tarjan。 阅读全文
posted @ 2017-08-26 13:15 Blue233333 阅读(292) 评论(0) 推荐(0) 编辑
摘要: n<=100000个点在坐标系上,选m个点使点间最小距离最大。 二分模板?? 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<algorithm> 5 #include<math.h> 6 //#inc 阅读全文
posted @ 2017-08-14 18:50 Blue233333 阅读(226) 评论(0) 推荐(0) 编辑
摘要: n<=100个点的根为1的二叉树,树边上有苹果,求保留Q<=n条边的最多苹果数。 树形DP,f[i][j]--节点i为根的子树保留j条边最优方案,f[i][0]=0,f[i][j]=max(f[lc[i]][k-1]+f[rc[i]][j-k-1]+v[lc[i]]+v[rc[i]]),这是左右都选 阅读全文
posted @ 2017-08-13 21:00 Blue233333 阅读(229) 评论(0) 推荐(0) 编辑
摘要: n个村庄m条带权路,权值为花费,村庄可以造东西卖东西,造完东西可以换地方卖,给出每个村庄造东西花费a和最多个数b、卖东西价值c和最多个数d,求最大收益。 裸的费用流。然而还WA了一发。很好。 建源向每个村庄连边(b,a),(b,a)表示容量b费用a,每个村庄向汇点连边(d,-c),村庄间有路就互相连 阅读全文
posted @ 2017-08-13 19:55 Blue233333 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 给出n<=100000个已覆盖的区间[Li,Ri],Li,Ri<=1e9,求再覆盖m<=1e9个点如何使最长覆盖区间最大。 感谢KPM大爷的题解!! 首先把重复区间处理掉,剩下若干个不重区间。这采用类似于差分的“事件法”,左边+1,右边-1,>0的部分即是区间。 接下来,“求满足某个条件的最长区间” 阅读全文
posted @ 2017-08-13 19:42 Blue233333 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 给n<=100000个点的树,每个点有一个01串,长度m<=200,串的可以随时01取反,串的每一位对应权Vi,从根节点到某个节点经过决定哪些串取反后取得的最大价值为某个点的权值,求:在这棵树上乱走,不能走权相同的相邻两点,每个长度D的简单路径的方案数。 题目很奇怪。结论很不显然。TJM和HR大佬很 阅读全文
posted @ 2017-08-13 10:35 Blue233333 阅读(123) 评论(0) 推荐(0) 编辑
摘要: n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行。 相等关系具有传递性,并查集维护;不等关系根据相等关系进行合并,采用平衡树的启发式合并。 每次遇到相等关系x,y,先找到x,y对应并查集的根p,q,判是否p在q的不等关系 阅读全文
posted @ 2017-08-13 06:44 Blue233333 阅读(330) 评论(0) 推荐(0) 编辑
摘要: n<=20个数,求能分成两个和相同的子集的子集数。 枚举子集的子集,复杂度3^n,不可,考虑折半。在一种可行方案中,每个数的系数只会是0,-1,1,题目就是要求找和为0的两个子集拼起来,将其中一个子集取反就对应成两个值相同的方案。比如找到一个子集值为x,那么另一个子集的值应为-x,只要把-x这个子集 阅读全文
posted @ 2017-08-12 10:30 Blue233333 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 数轴上n<=500000个点,点i在Xi处有Ai个东西,Xi递增,每秒钟可移动一单位并瞬间拿或放一个东西,最多能同时拿一个东西,任选择一个点在T<=1e18秒内把尽可能多的东西拿到该点。 感谢KPM大佬提供的解法!方便快捷! 最优方案一定是在这n个点上,因此枚举点看如何计算最优答案。 越往右边的点取 阅读全文
posted @ 2017-08-11 21:34 Blue233333 阅读(326) 评论(0) 推荐(0) 编辑