摘要:
题目大意: 给你一个括号序列s,不一定合法。 有q组询问,每次询问一段区间中最长的合法括号序列的长度。 思路: 首先我们可以将'('看做-1,将')'看做+1,那么我们可以求出这个括号序列的前缀和。 这是一个常用的套路,不难发现对于其中一个合法的子串,其左右两端所对应的前缀和是一样的(然而反之则不一 阅读全文
摘要:
1 #include 2 #include 3 #include 4 inline int getint() { 5 register char ch; 6 while(!isdigit(ch=getchar())); 7 register int x=ch^'0'; 8 while(isdigit(ch=getchar())) x=(((x<<2... 阅读全文
摘要:
1 #include 2 #include 3 #include 4 inline int getint() { 5 register char ch; 6 while(!isdigit(ch=getchar())); 7 register int x=ch^'0'; 8 while(isdigit(ch=getchar())) x=(((xy) ... 阅读全文
摘要:
题目大意: 求无向图最小环(超过3个点)。 思路: Floyd。 每次转移前,更新一次最小环。 也就是说现在用(i,k)和(k,j)更新(i,j)这条边,我们就看一下(i,k),(k,j),(i,j)这三条路径所构成的环是否是最小环。 但是这样会有一个问题,就是这些路径之间有可能会有重叠部分,导致最 阅读全文
摘要:
题目大意: 给你一个有向图,若用dis(u,v)表示从u到v的最短路长度,求从1到n的长度不超过dis(1,n)+k的路径数。 思路: 首先分别预处理出以1,n为起点的单、源最短路。 对于合法的边重构图,然后拓扑排序判环, BFS时判断一下当前点是否在合法路径上, 如果最后一个点没有被搜到且在合法路 阅读全文
摘要:
题目大意: 给你两个数a,b,保证a与b互质,求最大的x满足不能被表示成若干个a与b的和。 思路: 据说是小学奥数题。 考场上先写了个a*b的60分DP,然后打表发现答案就是(a-1)*(b-1)-1。 阅读全文
摘要:
题目大意: 有a,b两个人分糖,每个人都有一个能量值。 每个人每一轮可以选择进行两种操作: 1.取走最左边的糖果,补充相应的能量值并获取相应的美味度。 2.跳过这一轮,能量值-1. 问在每个人都采取最优决策的情况下,每个人能获得最多的美味度是多少? 思路: 动态规划。 f[i][j]表示吃第i~n的 阅读全文
摘要:
题目大意: 有一串n个字母,每个位置的字母可以同化边上的一个字母, 比如:ab可以变成aa或者bb。 相对的两个同化不能同时发生,比如ab不能变成ba。 现在给你一个字符串,问你经过任意次数的同化过程,最多能生成多少个字符串。 思路: 考虑同化过后的字符串与同化前的字符串的关系。 如果我们把一个字符 阅读全文
摘要:
题目大意: 给你n个数,求这些数能异或出的数的最大值。 思路: 线性基模板。 b中的数满足对于每个b[i],最高位在第i位。 构造方法就是对于每个数字,从高到低枚举每一个1,如果这一位对应的b[i]还没有,就把这个数作为b[i],如果有,就把这个数异或上b[i]。 考虑两个数a,b,它们能异或出来的 阅读全文
摘要:
题目大意: 有一棵n个结点的树,每个点都有一个权值,你要从中选出不超过k+1个点使得权值和尽量大。 同时要注意如果一个点被选择,那么它的子树和这个点到根结点路径上的点不能被选择。 思路: 很水的树形DP。 f[i][j]表示以i为根的子树中选择了j个点的最大权值和。 状态转移方程f[par[i]][ 阅读全文