group 状压dp
应某些人要求,我把标签删掉了
这是一道好题。
一看$c<=16$果断状压,但是怎么压?
一个很显然的思路是,枚举上下两层的状态,每一层的状态极限有$C(c,c/2)$,c=16的时候有13000左右,显然是死掉了。
我们考虑换个角度。上下两层的状态数太多,那我们不妨只考虑一层,而每个点只与它上下左右四个点有关,在dp的时候也只需要考虑上面和左边的数,多余的点在转移完右边和下边之后就失去了用处,那么我们不妨扔掉它们。
想到这个之后这道题就比较简单了。
我们令$f[i][j][k]$表示当前考虑第i行第j个位置,状态为k时候的状态数,转移思路和插头dp有些类似,考虑当前格上面和左边是否有字母转移即可
这道题很多思路都和插头dp有些相近的地方。
理论复杂度$O(rc2^c)$,实际则远远达不到(达到了复杂度也是对的)
#include<bits/stdc++.h>
using namespace std;
int r,c,cur,la,ans;
char s[][];
struct hash_map{
int fi[],ne[];
int val[],tot,f[];
inline void clear(){
tot=;memset(fi,,sizeof(fi));
}
inline int &operator [](int x){
int y=x%,i=fi[y];
for(;i&&val[i]!=x;i=ne[i]);
if(!i) ne[++tot]=fi[y],fi[y]=i=tot,val[tot]=x,f[i]=;
return f[i];
}
}g[];
inline int count(int x,int y){
int cnt=;
for(int i=;i<y;i++) cnt+=((x&)>>),x>>=;
return cnt;
}
inline int count2(int x,int y){
int cnt=;
for(int i=c;i>=y;i--)
if(x&(<<i)) cnt++;
return cnt;
}
int main(){
cin>>r>>c;
for(int i=;i<=r;i++) scanf("%s",s[i]+);
g[][]=;
for(int i=;i<=r;i++){
int len=strlen(s[i]+),lea=strlen(s[i-]+);
for(int j=;j<=c;j++){
la=cur,cur^=;g[cur].clear();
for(int k=;k<=g[la].tot;k++){
int v=g[la].val[k],f=g[la].f[k],c1=count(v,j-),c2=lea-count2(v,j)+;
if(len-c1>c-j+)continue;
if((v&(<<j-))&&(v&(<<j))&&c1<len) g[cur][v]=max(g[cur][v],f+(s[i][c1+]==s[i][c1])+(s[i-][c2]==s[i][c1+]));
else if(v&(<<j-)&&c1<len) g[cur][v|(<<j)]=max(g[cur][v|(<<j)],f+(s[i][c1+]==s[i][c1]));
else if(v&(<<j)&&c1<len) g[cur][v]=max(g[cur][v],f+(s[i][c1+]==s[i-][c2]));
else if(c1<len) g[cur][v|(<<j)]=max(g[cur][v|(<<j)],f);
if(len-c1<=c-j)g[cur][(v|(<<j))^(<<j)]=max(g[cur][(v|(<<j))^(<<j)],f);
}
}
}
for(int i=;i<=g[cur].tot;i++)
if(count(g[cur].val[i],c)==strlen(s[r]+))
ans=max(ans,g[cur].f[i]);
printf("%d\n",ans<<);
return ;
}
group 状压dp的更多相关文章
- group:状压dp,轮廓线
神仙题.但是难得的傻孩子cbx没有喊题解,所以也就难得的自己想出来了一个如此神仙的题. 如果是自己想的,说它神仙是不是有点不合适啊..? 反正的确不好像.关键就在于这个标签.颓完标签就差不多会了. % ...
- hdu5304 Eastest Magical Day Seep Group's Summer 状压dp+生成树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举全部的 ...
- BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS
BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS Description Farmer John has taken the cows to a va ...
- HDU 2923 Relocation(状压dp+01背包)
题目代号:HDU2923 题目链接:http://poj.org/problem?id=2923 Relocation Time Limit: 1000MS Memory Limit: 65536K ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
随机推荐
- MongoDB 学习笔记之 基本CRUD
Mongo 命令: show databases/dbs; use test; show tables/collections; db.help() db.createCollection('user ...
- Spring Boot 2.X(四):Spring Boot 自定义 Web MVC 配置
0.准备 Spring Boot 不仅提供了相当简单使用的自动配置功能,而且开放了非常自由灵活的配置类.Spring MVC 为我们提供了 WebMvcConfigurationSupport 类和一 ...
- Nginx开启Gzip压缩提升页面加载速度
1.在 nginx 的conf 目录下新建 gzip.conf 文件 #开启gzip压缩 gzip on; #设置允许压缩的页面最小字节数 gzip_min_length 1k; #申请4个单位为16 ...
- java中String转Date与Date转String
public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = n ...
- SQL SERVER 数据库中查看文本字段中的数据长度LEN() 函数的使用方法
SQL LEN() 语法 SELECT LEN(column_name) FROM table_name Id LastName FirstName Address City 1 Adams John ...
- 关于Python读写Excel
关于Excel的读写本人最近看到一篇不错的文章话不多少直接连接https://blog.csdn.net/qq_41185868/article/details/80469355
- Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kubelet-config-1.12: dial tcp 172.18.255.243:6443: i/o timeout
问题描述 使用外网加入集群的时候报如下错误: Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kube ...
- mac专业视频剪辑软件 Final Cut Pro 10.4.6破解版
Final Cut Pro简称FCP,它是 Mac平台上最好的视频剪辑软件,可用来视频剪辑.后期特效等.可编辑从标清到4K的各种分辨率视频,ColorSync管理的色彩流水线则可保证全片色彩的一致性. ...
- Hadoop实战1:MapR在ubuntu集群中的安装
由于机器学习算法在处理大数据处理的时候在所难免的会效率降低,公司需要搭建hadoop集群,最后采用了商业版的Hadoop2(MapR). 官网: http://doc.mapr.com/display ...
- postman设置环境变量与全局变量
1.环境变量可以设置多组 设置环境变量 编辑环境变量 2.全局变量只能设置一组 可以在Pre-request Script和Tests中设置全局变量 如:pm.globals.set("na ...