传送门

完了……好像……已经把插头dp全都忘光了……
可以去看看这篇blog
为了卡常变得丧心病狂的代码

//minamoto
#include<bits/stdc++.h>
#define ll long long
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=25,P=23333,M=40005;
struct MAIN{int n,m;char s[N];bool mp[N][N];int cnt[2],cur,vis[2][M],hsh[P+5],ex,ey,S,l,r,dt,val;ll dp[2][M],ans;void insert(R int S,R ll sum){R int pos=S%P;while(hsh[pos]){if(vis[cur][hsh[pos]]==S)return (void)(dp[cur][hsh[pos]]+=sum);pos=(pos+1)%P;}hsh[pos]=++cnt[cur],vis[cur][hsh[pos]]=S,dp[cur][hsh[pos]]=sum;}MAIN(){scanf("%d%d",&n,&m);fp(i,1,n){scanf("%s",s+1);fp(j,1,m)if(s[j]=='.')mp[i][j]=1,ex=i,ey=j;}dp[0][1]=cnt[0]=1;fp(i,1,n){fp(j,1,m){cnt[cur^=1]=0;memset(hsh,0,sizeof(hsh));fp(k,1,cnt[cur^1]){S=vis[cur^1][k],l=(S>>((j-1)<<1))&3,r=(S>>(j<<1))&3;if(!mp[i][j]){if(!l&&!r)insert(S,dp[cur^1][k]);continue;}if(!l&&!r){if(!mp[i][j+1]||!mp[i+1][j])continue;insert(S^(1<<((j-1)<<1))^(2<<(j<<1)),dp[cur^1][k]);}if(l&&!r){if(mp[i][j+1])insert(S^(l<<((j-1)<<1))^(l<<(j<<1)),dp[cur^1][k]);if(mp[i+1][j])insert(S,dp[cur^1][k]);}if(!l&&r){if(mp[i+1][j])insert(S^(r<<(j<<1))^(r<<((j-1)<<1)),dp[cur^1][k]);if(mp[i][j+1])insert(S,dp[cur^1][k]);}if(l==1&&r==1){dt=1;fp(p,j+1,m){val=(S>>(p<<1))&3;if(val==1)++dt;if(val==2)--dt;if(!dt){S^=(2<<(p<<1))^(1<<(p<<1));break;}}insert(S^(1<<((j-1)<<1))^(1<<(j<<1)),dp[cur^1][k]);}if(l==2&&r==2){dt=1;fd(p,j-2,0){val=(S>>(p<<1))&3;if(val==1)--dt;if(val==2)++dt;if(!dt){S^=(1<<(p<<1))^(2<<(p<<1));break;}}insert(S^(2<<((j-1)<<1))^(2<<(j<<1)),dp[cur^1][k]);}if(l==2&&r==1)insert(S^(2<<((j-1)<<1))^(1<<(j<<1)),dp[cur^1][k]);if(l==1&&r==2&&i==ex&&j==ey)ans+=dp[cur^1][k];}}fp(j,1,cnt[cur])vis[cur][j]<<=2;}printf("%lld\n",ans);}
}T;
int main(){return 0;}

转载于:https://www.cnblogs.com/bztMinamoto/p/10066157.html

P5056 【模板】插头dp相关推荐

  1. 【luogu P5056】【模板】插头dp(插头DP)(分类讨论)

    [模板]插头dp 题目链接:luogu P5056 题目大意 有一个 n*m 的网格,每个格子要么必须铺线,要么必须不铺. 然后问你有多少个铺发使得形成一个闭合回路. 思路 快乐插头 DP 模板题. ...

  2. bzoj1814 Ural 1519 Formula 1(插头dp模板题)

    1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 924  Solved: 351 [Submit][S ...

  3. 插头DP 概率DP / 期望DP

    插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...

  4. NEFU 155 超弦(插头DP)

    超弦 Time Limit 5000ms Memory Limit 65536K description 前阵子hh看了一系列科普片<<优雅的宇宙>>,惊讶的发现整个世界都是由 ...

  5. 好学易懂 从零开始的插头DP(三)

    好学易懂 从零开始的插头DP(三) 写在前面 这篇文章主要是介绍一些括号表示法和简单回路的基本变化,下一篇会是一些非回路(最小表示),毒瘤状态(正wa着所以咕着),结合矩阵乘法加速等一些复杂应用.下下 ...

  6. [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识--这真的是一种很锻炼人的题型-- 每一道题的状态都不一样 ...

  7. HDU4084 插头dp

    题意:给定一个图,0是不能放的,然后现在有1X1和1X2方块,最后铺满该图,使得1X1使用次数在C到D之间,1X2次数随便,问有几种放法 思路:插头DP或轮廓线,多加一维DP讨论就可以 注意插头DP状 ...

  8. POJ3133(插头dp)

    传送门:http://poj.org/problem?id=3133 Manhattan Wiring Time Limit: 5000MS   Memory Limit: 65536K       ...

  9. P3272 [SCOI2011]地板(插头DP)

    [题面链接] https://www.luogu.org/problemnew/show/P3272 [题目描述] 有一个矩阵,有些点必须放,有些点不能放,用一些L型的图形放满,求方案数 [题解] ( ...

  10. POJ 3133 Manhattan Wiring (插头DP)

    Manhattan Wiring Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1110   Accepted: 634 D ...

最新文章

  1. php查找二维数组下标,PHP实现二维数组中的查找算法小结
  2. 按钮button的常用属性和事件
  3. python观察日志(part25)--创建numpy数组
  4. MFC中创建线程实例
  5. python中文件基本操作命令及注意事项
  6. 快速幂运算 《挑战程序设计竞赛》
  7. [git]git的基本原理|git branch|git
  8. 智能优化算法:猫群优化算法-附代码
  9. cmake安装包下载
  10. win10系统,使用Windows照片查看器打开图片
  11. C语言递归函数 写一个程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数
  12. 记一次投稿springer期刊,利用tex排版文稿
  13. 简单的在html中引入地图
  14. EPICS记录参考3 -- 所有记录都有的字段
  15. 取消挂载是提示:device is busy
  16. spark RDD 打印元素
  17. js 你知道为什么[]==![]是成立的吗(强制类型转换)
  18. linux下脚本录制工具——script和scriptreplay
  19. 内网代理穿透1:nc代理穿透
  20. 洛谷P2327 [SCOI2005]扫雷 题解

热门文章

  1. 小希的迷宫(HDU 1272 并查集判断生成树)
  2. 【进阶】PyTorch自定义CUDA算子教程与运行时间分析
  3. 2020语言与智能技术竞赛-事件抽取方案整理(第一波
  4. 算法同学从学校到实习,需要改变什么
  5. 读《scikiit-learn机器学习》黄永昌第四章
  6. 论文赏析[AI18]更快的基于非二叉化自底向上策略的转移系统成分句法分析
  7. 5.2 分类器的评价指标—accuracy、precision、recall、F1、Fβ、AUC与ROC
  8. 时间序列-N_LSTM
  9. 前端中台化,把格局做大:Node.js与测试服务探索
  10. 阿里免费开放一切AI算力的背后是什么?