传送门

题意简述:给一个有障碍的网格图,问用若干个不相交的回路覆盖所有非障碍格子的方案数。


思路:轮廓线dpdpdp的模板题。

同样是讨论插头的情况,只不过没有前一道题复杂,不懂的看代码吧。

代码:

  1. #include<bits/stdc++.h>
  2. #include<tr1/unordered_map>
  3. #define ri register int
  4. using namespace std;
  5. using namespace tr1;
  6. typedef long long ll;
  7. int n,m,zx=-1,zy=-1,cur;
  8. bool mp[15][15];
  9. char s[15];
  10. ll ans=0;
  11. const int mod=1e6+7;
  12. struct Statement{
  13. int tot,idx[mod],sta[mod];
  14. ll num[mod];
  15. inline void clear(){memset(idx,-1,sizeof(idx)),tot=0;}
  16. inline void insert(int stat,ll nume){
  17. int pos=stat%mod;
  18. if(!pos)++pos;
  19. while(~idx[pos]&&sta[idx[pos]]!=stat)pos=pos==mod-1?1:pos+1;
  20. if(~idx[pos])num[idx[pos]]+=nume;
  21. else sta[idx[pos]=++tot]=stat,num[tot]=nume;
  22. }
  23. }f[2];
  24. inline int getbit(int x,int p){return (x>>(p-1))&1;}
  25. inline void update(int&x,int p,int v){x^=(v^getbit(x,p))<<(p-1);}
  26. inline void solve(){
  27. f[cur=0].clear(),f[cur].insert(0,1);
  28. for(ri i=1;i<=n;++i){
  29. for(ri j=1;j<=m;++j){
  30. cur^=1,f[cur].clear();
  31. for(ri tt=1;tt<=f[cur^1].tot;++tt){
  32. int stat=f[cur^1].sta[tt],p=getbit(stat,j),q=getbit(stat,j+1);
  33. ll dpnum=f[cur^1].num[tt];
  34. if(!mp[i][j]){if(!(p+q))f[cur].insert(stat,dpnum);continue;}
  35. if(!(p+q)){
  36. if(mp[i][j+1]&&mp[i+1][j])update(stat,j,1),update(stat,j+1,1),f[cur].insert(stat,dpnum);
  37. continue;
  38. }
  39. if(!p){
  40. if(mp[i][j+1])f[cur].insert(stat,dpnum);
  41. if(mp[i+1][j])update(stat,j,1),update(stat,j+1,0),f[cur].insert(stat,dpnum);
  42. continue;
  43. }
  44. if(!q){
  45. if(mp[i+1][j])f[cur].insert(stat,dpnum);
  46. if(mp[i][j+1])update(stat,j,0),update(stat,j+1,1),f[cur].insert(stat,dpnum);
  47. continue;
  48. }
  49. update(stat,j,0),update(stat,j+1,0),f[cur].insert(stat,dpnum);
  50. if(i==zx&&j==zy)ans+=dpnum;
  51. }
  52. }
  53. for(ri j=1;j<=f[cur].tot;++j)f[cur].sta[j]<<=1;
  54. }
  55. }
  56. inline int read(){
  57. int ans=0;
  58. char ch=getchar();
  59. while(!isdigit(ch))ch=getchar();
  60. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  61. return ans;
  62. }
  63. int main(){
  64. for(ri up=read(),tt=1;tt<=up;++tt){
  65. n=read(),m=read(),zx=zy=-1,memset(mp,0,sizeof(mp));
  66. for(ri i=1;i<=n;++i)for(ri j=1;j<=m;++j)if(mp[i][j]=read())zx=i,zy=j;
  67. if(zx==-1)puts("0");
  68. else ans=0,solve(),cout<<"Case "<<tt<<": There are "<<ans<<" ways to eat the trees.\n";
  69. }
  70. return 0;
  71. }

2019.01.23 hdu1693 Eat the Trees(轮廓线dp)的更多相关文章

  1. 2019.01.23 ural1519 Formula 1(轮廓线dp)

    传送门 轮廓线dpdpdp模板题. 题意简述:给一个放有障碍的网格图,问有多少种方法能使所有非障碍格子都在同一条哈密顿回路上面. 考虑用括号序列的写法来状压这个轮廓线. 用000表示没有插头,111表 ...

  2. HDU1693 Eat the Trees —— 插头DP

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

  3. HDU1693 Eat the Trees 插头dp

    原文链接http://www.cnblogs.com/zhouzhendong/p/8433484.html 题目传送门 - HDU1693 题意概括 多回路经过所有格子的方案数. 做法 最基础的插头 ...

  4. hdu1693 Eat the Trees [插头DP经典例题]

    想当初,我听见大佬们谈起插头DP时,觉得插头DP是个神仙的东西. 某大佬:"考场见到插头DP,直接弃疗." 现在,我终于懂了他们为什么这么说了. 因为-- 插头DP很毒瘤! 为什么 ...

  5. 2019.01.24 NOIP训练 旅行(轮廓线dp)

    传送门 题意简述: 给一个n∗mn*mn∗m的有障碍的网格图,问你从左上角走到左下角并覆盖所有可行格子的路径条数. 思路: 路径不是很好算. 将图改造一下,在最前面添两列,第一列全部能通过,第二列只有 ...

  6. hdu1693 Eat the Trees 【插头dp】

    题目链接 hdu1693 题解 插头\(dp\) 特点:范围小,网格图,连通性 轮廓线:已决策点和未决策点的分界线 插头:存在于网格之间,表示着网格建的信息,此题中表示两个网格间是否连边 状态表示:当 ...

  7. [Hdu1693]Eat the Trees(插头DP)

    Description 题意:在n*m(1<=N, M<=11 )的矩阵中,有些格子有树,没有树的格子不能到达,找一条或多条回路,吃完所有的树,求有多少种方法. Solution 插头DP ...

  8. HDU1693 Eat the Trees(zerojudge a228)

    传送门: https://zerojudge.tw/ShowProblem?problemid=a228 http://acm.hdu.edu.cn/showproblem.php?pid=1693 ...

  9. HDU 1693 Eat the Trees(插头DP)

    题目链接 USACO 第6章,第一题是一个插头DP,无奈啊.从头看起,看了好久的陈丹琦的论文,表示木看懂... 大体知道思路之后,还是无法实现代码.. 此题是插头DP最最简单的一个,在一个n*m的棋盘 ...

随机推荐

  1. unity3d英语单词拼写小游戏Pics Quiz Maker With Categories 3.0

    下载地址: https://item.taobao.com/item.htm?spm=0.7095261.0.0.19f71debcef4hT&id=575991216080

  2. Quagga的安装和使用

    Quagga的安装和使用 测试环境:VM 12   CentOS 6.5 64位 Quagga是一款功能比较强大的开源路由软件,支持rip, ospf,bgp等协议. 1.       Quagga的 ...

  3. MySQL的四种不同查询的分析

    1.前置条件: 本次是基于小数据量,且数据块在一个页中的最理想情况进行分析,可能无具体的实际意义,但是可以借鉴到各种复杂条件下,因为原理是相同的,知小见大,见微知著! 打开语句分析并确认是否已经打开 ...

  4. TZOJ 2415 Arctic Network(最小生成树第k小边)

    描述 The Department of National Defence (DND) wishes to connect several northern outposts by a wireles ...

  5. 被遗忘的having

    清明节后公司网站搞活动主要功能很简单就是实现一个消费送的功能.比如, 当天消费金额满5000 返回10%,5000 及以下 返 7% 的功能.本身这个功能不是很难,但是  这个功能跟上次的一个 新用户 ...

  6. SQL Server2005/2008 作业执行失败的解决办法

    数据库:SQL Server 2005/2008,运行环境:Windows Server 2008  在数据库里的所有作业都执行失败,包括自动执行和手动执行.在事件查看器里看到的错误报告如下: 该 作 ...

  7. 24-算法训练 删除数组零元素-- list的使用

    http://lx.lanqiao.cn/problem.page?gpid=T201 算法训练 删除数组零元素   时间限制:1.0s   内存限制:512.0MB      从键盘读入n个整数放入 ...

  8. 组委会正在为美团点评CodeM大赛的决赛设计新赛制

    比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛.复赛的成绩,会有不同的积分.比赛采取锦标赛赛制,分轮次进行,设某一轮有 m 个人参加,那么参赛者会被分为 m/2 组,每组恰好 ...

  9. JFinal Web开发学习(七)使用layUI美化的登录功能

    效果: 验证码还是没有布局好.背景比较怀古. 1.写前端html login.jsp <!DOCTYPE html> <html> <head> <meta ...

  10. Java并发集合(二)-ConcurrentSkipListMap分析和使用

    一.ConcurrentSkipListMap介绍 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景.ConcurrentSkipListMap和TreeMap, ...