摘要: dp+树状数组 思维僵化怎么办。。。 我们都知道,如果两个序列中所有元素都不相同,那么可以用lis求解,复杂度nlogn,但是这道题不行,每种元素出现了5次。。。然后我一直在想有没有什么解决办法 事实上是这个样子的,考虑二维dp,dp[i][j]=dp[i-1][j-1]+1当且仅当s[i]==t[ 阅读全文
posted @ 2017-11-02 21:41 19992147 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题面:不存在的 我们先dfs一次,只保留每个分叉最上面的颜色,并求到根的前缀和,这就是每个点到根的和,记为s1,然后我们求子树里的,这里只保留了最上面的颜色,那么我们求树链的并,做树上前缀和,这就是子树颜色的和,记为s2,s1+s2就是子树和到根颜色的并,因为只保留了最上层的颜色,也就是说对于一个点 阅读全文
posted @ 2017-11-02 16:57 19992147 阅读(154) 评论(0) 推荐(0) 编辑
摘要: dp 字符串dp不太会啊。。。 这种序列和子串的匹配一般设两个状态,dp[i][j]表示当前s匹配到i,t匹配到j的...,g[i][j]表示当前s匹配到i,t匹配到j,i,j必须匹配的...,noip2015的子串也是这个套路,这道题是设最远能匹配到哪里,贪心显然,转移具体看代码,注意一定要把条件 阅读全文
posted @ 2017-11-02 07:50 19992147 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 二分+lca 我们把向中间缩看成向上爬,向两边走看成向下爬,那么就相当于找出两个状态的lca,如果相邻的差是(a,b),a<b,那么向中间走就是(a,b-a)或(b-a,a),这个东西很像更相减损术,那么我们直接用(b-1)/a算出来要走的步数,然后继续递归求lca,直到走不了为止。先爬inf步判断 阅读全文
posted @ 2017-11-02 07:46 19992147 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 贪心 n%3==1 分出一个4,其余用3,n%3==2,分出一个2,其余用3,然后高精度就行了 #include<bits/stdc++.h> using namespace std; const int N = 5005; struct BigInt { int len; int a[N]; Bi 阅读全文
posted @ 2017-11-02 07:40 19992147 阅读(109) 评论(0) 推荐(0) 编辑