BZOJ 5336: [TJOI2018]party
状压最长公共子序列的DP数组,一维最多K(15)个数,且相邻两个数的差不超过1,2^15种状态,预处理转移
#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
int n,K,now[25],G[25],To[50005][3],F[2][50005][3],ED[50005],ANS[25],S[25];
char s[1000005];
void dfs(int t,int s){
if (t>K){
for (int i=1; i<=K; i++) {
now[i]=now[i-1];
if (s&(1<<i-1)) now[i]++;
}
ED[s]=now[K];
for (int to=0; to<3; to++){
for (int i=1; i<=K; i++) G[i]=max(max(G[i-1],now[i]),now[i-1]+(to==S[i]));
for (int i=K; i>=1; i--) (To[s][to]<<=1)|=(G[i]-G[i-1]);
}
return;
}
dfs(t+1,s<<1);
dfs(t+1,s<<1|1);
}
int main(){
scanf("%d%d",&n,&K);
scanf("%s",s+1);
for (int i=1; i<=K; i++){
if (s[i]=='N') S[i]=0;
else if (s[i]=='O') S[i]=1;
else S[i]=2;
}
dfs(1,0);
F[0][0][0]=1;
for (int i=0; i<n; i++){
for (int pre=0; pre<(1<<K); pre++)
for (int cas=0; cas<3; cas++)
F[(i+1)%2][pre][cas]=0;
for (int pre=0; pre<(1<<K); pre++)
for (int cas=0; cas<3; cas++)
if (F[i%2][pre][cas]){
for (int to=0; to<3; to++){
int now=To[pre][to],Tocas=cas;
if (to==cas) Tocas++;
else{
if (to==0) Tocas=1;
else Tocas=0;
}
if (Tocas==3) continue;
(F[(i+1)%2][now][Tocas]+=F[i%2][pre][cas])%=mod;
}
}
}
for (int now=0; now<(1<<K); now++)
for (int cas=0; cas<3; cas++)
(ANS[ED[now]]+=F[n%2][now][cas])%=mod;
for (int i=0; i<=K; i++)
printf("%d\n",ANS[i]);
return 0;
}
BZOJ 5336: [TJOI2018]party的更多相关文章
- bzoj 5337 [TJOI2018] str
bzoj 5337 [TJOI2018] str Link Solution 水题 直接 \(f[i][j]\) 表示以第 \(i\) 位为结束位置,当前已经匹配了前 \(j\) 个氨基酸的方案数 使 ...
- bzoj 5338: [TJOI2018]xor (树链剖分+可持久化01Trie)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5338 题面: 5338: [TJOI2018]xor Time Limit: 30 Sec ...
- BZOJ.5338.[TJOI2018]xor(可持久化Trie)
BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...
- BZOJ.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记
BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...
- 5336: [TJOI2018]party
题解: 比较水啦..dp套dp f[i][j][k]表示枚举了前i位,最大公共子序列匹配状态为j,noi匹配到了第k位 因为g[j]和g[j+1]最多差1 所以可以状压成j 然后内层再dp一下搞出下一 ...
- 洛谷 P4592: bzoj 5338: [TJOI2018]异或
题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞 ...
- BZOJ 5334: [Tjoi2018]数学计算
线段树裸题 难度在于认识到这个没法线性做 #include<cstdio> using namespace std; int n,mod,tr[400005]; void insert(i ...
- BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s&qu ...
- [模板] dp套dp && bzoj5336: [TJOI2018]party
Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...
随机推荐
- ASPCTJ
ublic interface ISomeService { public void doSome(); public String dade(); } public class SomeServic ...
- 记录下这周的mysql调优工作
这周一至周四基本都在做mysql的测试和调优工作,包括erlang端对mysql的写入测试,到今天为止暂且告一段落,下周先做下其他的开发. 测试环境 使用的测试环境是aliyun的杭州节点 ...
- 草根程序员如何进入BAT
首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - JavaScript - HTML5 - CSS 后端 - Pyt ...
- android studio项目提交Git@OSC
转载地址:http://www.bubuko.com/infodetail-977061.html 先到git.oscchina.net网站上申请个账号,然后创建一个项目.过程不再说了. 新建工程后, ...
- getuser
Help on function getuser in module getpass: getuser() Get the username from the environment or pa ...
- Windows计算机重置TCP / IP
传输控制协议 (TCP / IP)是Internet上使用的通信协议. 在Windows的早期版本中,TCP / IP是一个单独的可选组件,可以像其他任何协议一样删除或添加. 早期版本中,从Windo ...
- Selenium3+webdriver学习笔记4(css方式元素定位)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriver import time,os # about:ad ...
- 理解Postgres性能
目录[-] 理解Postgres性能 理解缓存和缓存命中率 理解索引用途 Heroku Dashboard示例 索引缓存命中率 理解Postgres性能 对于很多应用程序开发人员来说数据库就是一个黑盒 ...
- BZOJ 4175: 小G的电话本 SAM+FFT
4175: 小G的电话本 Time Limit: 45 Sec Memory Limit: 256 MBSubmit: 195 Solved: 48[Submit][Status][Discuss ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...