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

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

这是自己理解的代码,但是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. 【节点-添加标签】【节点-删除标签】【显示年-月-日-星期】【math算数】【正则表达式】

    1.节点-添加标签 <body><div id="div1"><p id="p1">这是一个段落.</p>< ...

  2. stega -- Pcat老入群题

    stega -- Pcat老入群题 Pcat师傅的题果然给力,就是看着wp也是琢磨了半天. WP地址:http://mp.weixin.qq.com/s/T9jJLACiZNB6FR226IjmEA ...

  3. python模块-----time

    说明 time模块提供各种时间相关的功能 与时间相关的模块有:time,datetime,calendar 这个模块的功能不是适用于所有的平台 这个模块中定义的大部分函数是调用C平台上的同名函数实现 ...

  4. 【VMware vSphere】VMware vSphere简单了解

    *什么是VMware vSphere           说VMware vSphere可能刚开始都是一脸懵逼,但是看到VMware时,首先想到的是不是VMware Workstation?也就是虚拟 ...

  5. C++ 11 snippets , 2

    <1>auto ,initializer_list<T>,auto指向函数指针的简易,和typdef 定义的类型执行函数指针有多复杂. #include <iostrea ...

  6. MySQL软件基本管理

    1. 忘记密码 windows平台下,5.6.43版本mysql # 关闭mysql # 在cmd中执行:mysqld --skip-grant-tables # 在cmd中执行:mysql # 执行 ...

  7. Linux的notifier机制在TP中的应用【转】

    转自:https://blog.csdn.net/armfpga123/article/details/51771666 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  8. ObjectArx2013新建工程出错的解决办法

    最近将一个ObjectArx升级到Arx2013版,使用ObjectArx2013向导时,新建项目时弹出错误"未能加载项目文件.给定编码中的字符无效.第1行,位置1",经网上查找发 ...

  9. hibernate框架学习之数据查询(QBC)helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...

  10. springcloud-3:required a bean of type 'com.netflix.discovery.DiscoveryClient' that could not be found.

    在写客户端程序的时候,总是报'com.netflix.discovery.DiscoveryClient' that could not be found. 原因在于导入了错误的类:com.netfl ...