首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ 3864 Hero meet devil (状压DP)
】的更多相关文章
BZOJ 3864 Hero meet devil (状压DP)
最近写状压写的有点多,什么LIS,LCSLIS,LCSLIS,LCS全都用状压写了-这道题就是一道状压LCSLCSLCS 题意 给出一个长度为n(n<=15)n(n<=15)n(n<=15)的字符串sss,只由A,T,G,CA,T,G,CA,T,G,C组成.对于0...n0...n0...n的每一个iii,求长度为m(m<=1000)m(m<=1000)m(m<=1000)且只由A,T,G,CA,T,G,CA,T,G,C组成的串中,有多少字符串与sss的最长公共子序列(…
HDU 4899 Hero meet devil (状压DP, DP预处理)
题意:给你一个基因序列s(只有A,T,C,G四个字符,假设长度为n),问长度为m的基因序列s1中与给定的基因序列LCS是0,1......n的有多少个? 思路:最直接的方法是暴力枚举长度为m的串,然后再用求LCS的dp.当然我们可以在枚举的时候同时进行dp,但是复杂的仍然为O(4 ^ m).我们可以观察求LCS 的状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) 若s[i] == s1[j] dp[i][j] = max(dp[i - 1][j…
bzoj 3864: Hero meet devil [dp套dp]
3864: Hero meet devil 题意: 给你一个只由AGCT组成的字符串S (|S| ≤ 15),对于每个0 ≤ .. ≤ |S|,问 有多少个只由AGCT组成的长度为m(1 ≤ m ≤ 1000)的字符串T,使得\(LCS(T,S) = i\)? dp套dp! 通过一个外层的dp来计算使得另一个dp方程(子dp)最终结果为特定值的输入数. 一位一位确定子dp的输入,记录子dp的状态值 子dp: \(d(i,j)\)表示\(LCS(T[1,i],S[1,j])\),对第二维差分,\(…
bzoj 3864: Hero meet devil(dp套dp)
题面 给你一个只由\(AGCT\)组成的字符串\(S (|S| ≤ 15)\),对于每个\(0 ≤ .. ≤ |S|\),问 有多少个只由\(AGCT\)组成的长度为\(m(1 ≤ m ≤ 1000)\)的字符串\(T\),使得\(LCS(T,S)=i\)? 题解 老早就听说这个叫做\(dp\ of\ dp\)的神仙了--然而一直没学-- 我们先考虑\(LCS\)是怎么转移的,设\(LCS(i,j)\)表示第一个串到\(i\),第二个串到\(j\)为止的最长公共子序列,那么转移为 \[ LCS(…
BZOJ 3864 Hero meet devil 超详细超好懂题解
题目链接 BZOJ 3864 题意简述 设字符集为ATCG,给出一个长为\(n(n \le 15)\)的字符串\(A\),问有多少长度为\(m(m \le 1000)\)的字符串\(B\)与\(A\)的最长公共子序列为\(i\),对所有\(0 \le i \le n\)输出答案. 题解 传说中的计算机理论科科科科科学家cls的DP套DP. 因为看别人写的题解我都看不懂--所以我在这篇题解中,换一种方式讲解,从暴力一点点优化得到DP套DP,应该更容易理解. 暴力怎么写呢?显然是枚举所有可能的字符串…
bzoj 3864: Hero meet devil
bzoj3864次元联通们 第一次写dp of dp (:з」∠) 不能再颓废啦 考虑最长匹配序列匹配书转移 由于dp[i][j]的转移可由上一行dp[i-1][j-1],dp[i-1][j],dp[i][j-1]得来 把dp[i]差分,得到一个01串 就可以用rans[s][ch]表示在状态s的dp数组后面接字符ch可以转移到的状态 枚举该转移就好了QAQ /************************************************************** Probl…
BZOJ.4145.[AMPPZ2014]The Prices(状压DP)
BZOJ 比较裸的状压DP. 刚开始写麻烦惹... \(f[i][s]\)表示考虑了前\(i\)家商店,所买物品状态为\(s\)的最小花费. 可以写求一遍一定去\(i\)商店的\(f[i]\)(\(f[i][s]=f[i-1][s]+dis[i]\)),然后再和不去\(i\)商店的\(f[i-1]\)取个\(\min\). 复杂度是\(O(nm2^m)\)吗... 可以优化,处理\(f[s]\)表示在某家商店买\(s\)集合的物品的最小代价.然后令\(g[s]\)表示考虑所有商店买\(s\)集合…
BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的,先使这整个子集内满足平衡,求一棵最小生成树就一定可以了. 这样可能会不最优,我们可以用更小的子集(小的话还是最优的)去更新大的. 还需要合并这些子集.将任意两个\(\sum A_i=0\)的子集都是合法的,且会更新到所有情况. \(2^n\times 2^n\)枚举\(\sum A_i=0\)的子集…
bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: #include <bits/stdc++.h> #define N 21 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; const…
BZOJ 4197: [Noi2015]寿司晚宴 状压dp+质因数分解
挺神的一道题 ~ 由于两个人选的数字不能有互质的情况,所以说对于一个质因子来说,如果 1 选了,则 2 不能选任何整除该质因子的数. 然后,我们发现对于 1 ~ 500 的数字来说,只可能有一个大于 $\sqrt 500$ 的质因子(两个的话乘积就超过 500 了) 而不大于 $\sqrt 500$ 的质因子总数只有 8 个,所以可以对这 8 个质因子状压. 我们先假设所有数字都 $\eqslant 30$,即所有质因子都 $leqslant \sqrt 500$. 定义状态 dp[i][j]…