正题

题目链接:https://www.luogu.com.cn/problem/P5074


题目大意

给出一个n×mn\times mn×m的网格,有的必须铺线有的不能,铺成若干条闭合回路,求方案数。

1≤n,m≤121\leq n,m\leq 121≤n,m≤12


解题思路

考虑插头dpdpdp,因为可以随意开回路,所以就没有严格匹配的限制了,可以直接用二进制记录每个位置有没有插头就好了。

时间复杂度:O(nm2m)O(nm2^m)O(nm2m)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=13;
ll T,n,m,v[N][N],f[2][1<<N];
signed main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&m);for(ll x=0;x<n;x++)for(ll y=0;y<m;y++)scanf("%lld",&v[x][y]);ll o=0,MS=1<<m+1;f[o][0]=1;for(ll s=1;s<MS;s++)f[o][s]=0;for(ll x=0;x<n;x++){o^=1;for(ll s=0;s<MS;s++)f[o][s]=0;for(ll s=0;s<MS/2;s++)f[o][s<<1]=f[!o][s];for(ll y=0;y<m;y++){o^=1;for(ll s=0;s<MS;s++)f[o][s]=0;for(ll s=0;s<MS;s++){ll u=(s>>y+1)&1,l=(s>>y)&1,g=f[!o][s];if(!g)continue;if(!v[x][y]){if(!u&&!l)f[o][s]+=g;}else{if(!u&&!l)f[o][s|(1<<y)|(1<<y+1)]+=g;else if(u&&!l){f[o][s]+=g;//转右 f[o][s^(1<<y)^(1<<y+1)]+=g;//转下 }else if(!u&&l){f[o][s]+=g;//转下 f[o][s^(1<<y)^(1<<y+1)]+=g;//转右}else{f[o][s^(1<<y)^(1<<y+1)]+=g;}}}}}printf("%lld\n",f[o][0]);}return 0;
}

P5074-Eat the Trees【插头dp】相关推荐

  1. hdu 1693 Eat the Trees 插头dp

    每一个点可向上下左右四个方向连边,这就是插头. 每一条轮廓线切开的是当前已确定的点的未确定的点,其经过的插头有m个竖着的,一个横着的,懒得画图了.. 每一次转移就是将左边的变到下面,上面的变到左边,每 ...

  2. HDU1693 Eat The Trees(插头dp)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Othe ...

  3. HDU1693 Eat the Trees —— 插头DP

    题目链接:https://vjudge.net/problem/HDU-1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Others)    Mem ...

  4. hdu1693Eat the Trees(插头dp)

    传送门 先坑着,等啥时候会了再来填坑 不得不说思路真的是很妙啊 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 # ...

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

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

  6. HDU 1693(状态压缩 插头DP)

    我们引用国家队2008年陈丹琦的大作--<基于连通性状态压缩的动态规划问题>,上面对于插头.轮廓线的概念有详细的解释,不再赘述. 我们使用一个三维数组,前两维表示所在的格子,后一维表示轮廓 ...

  7. URAL1519 Formula 1 —— 插头DP

    题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB ...

  8. 插头DP题目泛做(为了对应WYD的课件)

    题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. 1 #i ...

  9. NEFU 155 超弦(插头DP)

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

  10. 【POJ3133】Manhattan Wiring 插头DP

    原题走这里 看起来就很难的一道题 本题存在一个小陷阱,它看起来像是单回路模型(毕竟是求路径),然而它其实是多回路模型,或者说可以用多回路模型做. 这道题求的是最短距离,那么这就意味着如果出现了多出来的 ...

最新文章

  1. 关于60枚一分两分五分硬币凑成一块钱的解决方法
  2. linux终端出现bash: setup.bash: No such file or directory,和.bashrc文件的问题
  3. 验证java 递增不是原子操作
  4. 机器学习 KD树_递归搜索(matlab实现)
  5. [Spring5]IOC容器_Bean管理XML方式_p名称空间注入
  6. Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
  7. 怎么看so文件是哪个aar引进来的_运城人才引进7月5号面试
  8. bad response Not Found 404
  9. 概率图模型之贝叶斯网络的理解与应用
  10. everthing 打开历史记录功能
  11. python的十句名言_洗脑最厉害的10句名言名句
  12. 网名接龙--之追求完美
  13. 返乡之路不容易之12306余票查询并给出备选方案v2
  14. Himall商城表单数据类、插件类
  15. docker部署环境
  16. 5款靠谱的安卓备份应用
  17. MySQL大厂优化方案轻松应对高并发!真牛!
  18. python软件工程师面试题目及答案_Python面试题及答案汇总整理(2019版)
  19. 裂项相消的原理是什么
  20. html5仿mac商城css,html5+javascript+css商城(模拟联想)购物系统

热门文章

  1. 会计电算化的重要物质基础计算机和,湖北工业大学工程技术学院会计电算化管理办法...
  2. mysql字段简索引_MySQL优化看这一篇就够了
  3. 链表归并成递减c语言,将两个递增的单链表合并为一个递减的单链表
  4. php年月日滚动选择,Unity3d—做一个年月日选择器(Scroll Rect拖动效果优化)— 无限滚动 + 锁定元素...
  5. C语言 time函数 开销,C语言: 函数调用的开销
  6. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  7. jbl css-h15,JBL CSS8006BM 天花音箱
  8. groovy 字符串截取最后一个_Python入门高级教程--Python 字符串
  9. java使用教程——组件及事件处理——菜单(添加图标)
  10. leetcode213. 打家劫舍 II