hdu4064 三进制状态压缩 好题!
还不太会做这类题,总之感觉有点难啊。
用深搜代替打表求出一行所有的可行状态,注意要进行剪枝
这是自己理解的代码,但是tle了
#include<bits/stdc++.h> using namespace std; #define mod 1000000007 #define maxn 600005 int n,m,dp[2][maxn],sum; char mp[15][15][15]; int a[200],tag,flag,s[15]; // 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==0)dp[flag][down]+=tag;//如果是第一行,那么只要把组成这种状态的方案数加上即可 else {dp[flag][down]+=dp[(flag+1)%2][up]*tag;//加上上一行下状态为up的计数值 dp[flag][down]%=mod;}return;}for(int i=1;i<4;i++)//判断改行第i个方块是不是四方相同的 if(mp[r][num][i]!=mp[r][num][0])break;if(i==4){//四方相同的块直接跳过即可,并且这一行的结果要加上4 tag*=4;xx=a[mp[r][num][0]];if(xx==right || right==-1)dfs(r,num+1,up*3+xx,down*3+xx,xx);tag/=4;return; }for(int i=0;i<4;i++){//枚举该方块的安放方式,符合条件的进入下一轮深搜 xx=a[mp[r][num][i]];//下一格上方 rr=a[mp[r][num][(i+1)%4]];//下一格右侧 yy=a[mp[r][num][(i+2)%4]];//下一格下放ll=a[mp[r][num][(i+3)%4]];//下一格左侧if(right==-1 || ll==right)//如果是第一格或者左侧对上这一格的右侧,就可以往下搜了 dfs(r,num+1,up*3+xx,down*3+yy,rr); } }int ncase,t; void init(){cin>>ncase;a['F']=0,a['C']=1,a['R']=2;s[0]=1;for(int i=1;i<=12;i++)s[i]=s[i-1]*3;//使用三进制 flag=0; memset(dp,0,sizeof dp); }int main(){init();for(int t=1;t<=ncase;t++){cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++)cin>>mp[i][j];for(int i=0;i<n;i++){//利用滚动数组,dp[flag][s]表示第i行状态s下的方案数 tag=1;flag^=1;memset(dp[flag],0,sizeof dp[flag]);dfs(i,0,0,0,-1);}sum=0;for(int i=0;i<s[m];i++)//求和 sum+=dp[flag][i],sum%=mod;printf("Case %d: %lld\n",t,sum);} }
转载于:https://www.cnblogs.com/zsben991126/p/10364515.html
hdu4064 三进制状态压缩 好题!相关推荐
- BZOJ4479 [JSOI2013] 吃货jyy 解题报告(三进制状态压缩+欧拉回路)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4479 Description [故事背景] 作为JSOI的著名吃货,JYY的理想之一就是 ...
- #10172. 「一本通 5.4 练习 1」涂抹果酱 【 三进制状态压缩 】【 方案数 】
Tyvj 两周年庆典要到了,Sam 想为 Tyvj 做一个大蛋糕.蛋糕俯视图是一个 N×M 的矩形,它被划分成 N×M 个边长为 1×1 的小正方形区域(可以把蛋糕当成 NNN 行 MMM 列的矩阵) ...
- hdu3001 Travelling 三进制状态压缩dp
tsp类型,只是这里面的点最多可以访问2次. 所以用一个来表示访问了多少次,正好是三进制. 对于每个状态i,先处理出第j位为几,即num[i][j],方便使用. 用dp[i][j]表示,状态i时,以j ...
- 动态规划--数位dp--二进制状态压缩
和与或 给你一个数组R,包含N个元素,求有多少满足条件的序列A使得 0 ≤ A[i] ≤ R[i] A[0]+A[1]+...+A[N-1]=A[0] or A[1]... or A[N-1] 输出答 ...
- hdu3001(状态压缩dp)
题目链接: 点击打开链接 题目: After coding so many days,Mr Acmer wants to have a good rest.So travelling is the b ...
- 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划
例1 骑士(Sgu223) 1592:[例 1]国王 信息学奥赛一本通(C++版)在线评测系统 https://blog.csdn.net/guoyangfan_/article/details/82 ...
- 1815. 得到新鲜甜甜圈的最多组数 状态压缩
1815. 得到新鲜甜甜圈的最多组数 有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈.这个店铺有个规则,就是在烤一批新的甜甜圈时,之前 所有 甜甜圈都必须已经全部销售完毕.给你一个整数 b ...
- poj 3254 Corn Fields 状态压缩dp
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Description Farmer John has purchased a ...
- POJ 1753 Flip Game (黑白棋) (状态压缩+BFS)
题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色.游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完 ...
最新文章
- 抛弃P值,选择更直观的A/B测试!
- xml显示浏览器标签_浅析浏览器书签的导入和导出
- 把所有的谎言献给你β(找规律数学题)
- 大象喝水c语言程序,实现大象喝水(c语言)
- Matlab 图像处理的一些杂记
- 第十三期:你不想错过的那些JSON工具
- Text段、Data段和BSS段
- Modbus协议模型
- (转)淘淘商城系列——使用maven构建工程时出现的错误
- 电脑怎么设计java环境_java环境变量配置,详细教您win7怎么配置java环境变量。
- php脚本自动登录telnet,Windows环境上telnet自动登录和运行脚本
- CorelDRAWX4的VBA插件开发(二十九)使用C++制作动态连接库DLL辅助VBA构键强大功能-(3)制作最简单的可供调用的DLL
- mosse(Minimizing the Output Sum of Squared Error)论文解读
- 双霖度盘下载器(第三方百度网盘不限速下载工具)
- 物联网云平台的远程管理
- 功率因数 matlab,matlab功率因数测量
- Resource exhausted: OOM when allocating tensor with shape[620,20000] and type float on /job:localhos
- 单击屏幕亮屏流程分析
- h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)
- html表格字间距怎么调整,word表格中怎么调整文字行间距以及字符间距?
热门文章
- 拳王虚拟项目公社:小白如何从0到1搭建个人私域流量池?6招玩转流量裂变法
- cups源码下载 linux_正点原子Linux第七十章Linux WIFI驱动实验
- 同r做一个窗口_目标检测(Object Detection):R-CNN/SPPnet/R-FCN/Yolo/SSD
- oracle12c正在检查环境变量,oracle11g安装客户端检查先决条件失败
- 钢琴块2电脑版_云上钢琴学生端电脑版|云上钢琴学生端 V2.3.1 最新PC版 下载_当下软件园...
- Golang实践录:静态资源文件整合:初步使用
- GBK转unicode码查询表
- Linux无网络升级gcc,Linux离线(手动)升级GCC
- 【Elasticsearch】Nori:官方的韩语分析插件Elasticsearch
- 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器