还不太会做这类题,总之感觉有点难啊。

用深搜代替打表求出一行所有的可行状态,注意要进行剪枝

这是自己理解的代码,但是tle了

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 600005
int n,m,dp[][maxn],sum;
char mp[][][];
int a[],tag,flag,s[];
//
void dfs(int r,int num,int up,int down,int right){//用dfs搜索出第r行的下状态,上状态 和右侧颜色
int xx,rr,yy,ll,i;
if(num==m){//搜满了一行
if(r==)dp[flag][down]+=tag;//如果是第一行,那么只要把组成这种状态的方案数加上即可
else {
dp[flag][down]+=dp[(flag+)%][up]*tag;//加上上一行下状态为up的计数值
dp[flag][down]%=mod;
}
return;
}
for(int i=;i<;i++)//判断改行第i个方块是不是四方相同的
if(mp[r][num][i]!=mp[r][num][])break;
if(i==){//四方相同的块直接跳过即可,并且这一行的结果要加上4
tag*=;
xx=a[mp[r][num][]];
if(xx==right || right==-)dfs(r,num+,up*+xx,down*+xx,xx);
tag/=;
return;
} for(int i=;i<;i++){//枚举该方块的安放方式,符合条件的进入下一轮深搜
xx=a[mp[r][num][i]];//下一格上方
rr=a[mp[r][num][(i+)%]];//下一格右侧
yy=a[mp[r][num][(i+)%]];//下一格下放
ll=a[mp[r][num][(i+)%]];//下一格左侧
if(right==- || ll==right)//如果是第一格或者左侧对上这一格的右侧,就可以往下搜了
dfs(r,num+,up*+xx,down*+yy,rr);
}
} int ncase,t;
void init(){
cin>>ncase;a['F']=,a['C']=,a['R']=;
s[]=;
for(int i=;i<=;i++)s[i]=s[i-]*;//使用三进制
flag=;
memset(dp,,sizeof dp);
} int main(){
init();
for(int t=;t<=ncase;t++){
cin>>n>>m;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
cin>>mp[i][j]; for(int i=;i<n;i++){//利用滚动数组,dp[flag][s]表示第i行状态s下的方案数
tag=;flag^=;
memset(dp[flag],,sizeof dp[flag]);
dfs(i,,,,-);
} sum=;
for(int i=;i<s[m];i++)//求和
sum+=dp[flag][i],sum%=mod; printf("Case %d: %lld\n",t,sum);
}
}

hdu4064 三进制状态压缩 好题!的更多相关文章

  1. BZOJ4479 [JSOI2013] 吃货jyy 解题报告(三进制状态压缩+欧拉回路)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4479 Description [故事背景]作为JSOI的著名吃货,JYY的理想之一就是吃 ...

  2. hdu-3001 三进制状态压缩+dp

    用dp来求最短路,虽然效率低,但是状态的概念方便解决最短路问题中的很多限制,也便于压缩以保存更多信息. 本题要求访问全图,且每个节点不能访问两次以上.所以用一个三进制数保存全图的访问状态(3^10,空 ...

  3. 三进制状态压缩DP(旅行商问题TSP)HDU3001

    http://acm.hdu.edu.cn/showproblem.php?pid=3001 Travelling Time Limit: 6000/3000 MS (Java/Others)     ...

  4. HDU 3001 Travelling (三进制状态压缩 DP)

    题意:有 n 个city,能够选择任一城市作为起点,每一个城市不能訪问超过2次, 城市之间有权值,问訪问所有n个城市须要的最小权值. 思路:由于每一个城市能够訪问最多两次,所以用三进制表示訪问的状态. ...

  5. HDOJ-3001(TSP+三进制状态压缩)

    Traving HDOJ-3001 这题考察的是状态压缩dp和tsp问题的改编 需要和传统tsp问题区分的事,这题每个点最多可以经过两次故状态有3种:0,1,2 这里可以模仿tsp问题的二进制压缩方法 ...

  6. hdu 2167(状态压缩基础题)

    题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...

  7. hdu 1565(状态压缩基础题)

    题意:容易理解. 分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!! 代码实现: #inclu ...

  8. poj 3254(状态压缩基础题)

    题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案. 分析:这是我做的第一道状态压缩dp ...

  9. poj1185 状态压缩经典题

    状态压缩的好题,直接求会爆内存,先把所有可能的状态求出来存在stk里,然后f[i][k][t]表示i行状态为t,i-1状态为k,由i-1状态来推出i状态即可 注意要打好边际条件的状态,并且某个可行状态 ...

随机推荐

  1. window 编译lua 5.3

    由于lua 5.1 不支持左移右移的操作符,所以要移植lua 5.3.方便在window 下编译调试 参考链接: http://www.linuxidc.com/Linux/2014-02/96459 ...

  2. 《一头扎进SpringMvc视频教程》Rest风格的资源URL

    5.@PathVariable和@RequestParam的区别 请求路径上有个id的变量值,可以通过@PathVariable来获取  @RequestMapping(value = "/ ...

  3. SpringCloud Netflix Ribbon(负载均衡)

    ⒈Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...

  4. 最简单的HashMap底层原理介绍

    HashMap 底层原理  1.HashMap底层概述 2.JDK1.7实现方式 3.JDK1.8实现方式 4.关键名词 5.相关问题 1.HashMap底层概述 在JDK1.7中HashMap采用的 ...

  5. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  6. boost::asio实现一个echo服务器

    以前使用ACE实现Server框架,但是觉得太笨重,决定采用boost.asio来写服务器程序: 1.服务器构建在linux上面:当然也可以在windows下运行 2.io部分采用非阻塞模式.业务逻辑 ...

  7. 用ARX自定义实体

      本文介绍了构造自定义实体的步骤.必须继承的函数和必须注意的事项 1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h",&quo ...

  8. Java的if判断对象为null时,null放在比较运算符的左边还是右边较好?

    如java中:if(name == null)和if(null == name)有什么讲究吗? 答:在java里面,它们是一样的.但是通常写为null == name.这其实是在C语言里面引申出来的. ...

  9. BZOJ 3620: 似乎在梦中见过的样子

    似乎在梦中见过的样子.... 一道水题调了这么久,还半天想不出来怎么 T 的...佩服自己(果然蒟蒻) 这题想想 KMP 但是半天没思路瞟了一眼题解发现暴力枚举起始点,然后 KMP 如图: O( n2 ...

  10. 016_把普通用户免秘钥加入root用户的几种方式

    一.第一种方式. (1) [root@infra-jyallkv-tikv-pps-7 ~]# tail /etc/sudoers## Allows members of the users grou ...