[BZOJ2669][CQOI2012]局部最小值(容斥+状压DP)
发现最多有8个限制位置,可以以此为基础DP和容斥。
$f_{i,j}=f_{i-1,j}\times (cnt_j-i+1)+\sum_{k\subset j} f_{i-1,k}$
$cnt_j$表示当限制状态为j时i有多少个可行位置。
这样DP只能保证所有题设位置全部是局部最小值,但不保证其它位置不会变成局部最小值,容斥解决。
$O(DFS*8nm*2^8)$
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int mod=;
int dx[]={,,,-,,,-,,-},dy[]={,,,,-,,-,-,};
int n,m,ans,l,f[][<<],cnt[<<],vis[][],a[][];
char ch[][]; int dp(){
memset(f,,sizeof(f));
memset(cnt,,sizeof(cnt));
int top=;
rep(i,,n) rep(j,,m) if (ch[i][j]=='X')
a[++top][]=i,a[top][]=j;
for (int S=; S<(<<top); S++){
memset(vis,,sizeof(vis));
rep(i,,top) if (~S&(<<(i-))) vis[a[i][]][a[i][]]=;
rep(i,,n) rep(j,,m){
bool flag=;
rep(l,,) if (vis[i+dx[l]][j+dy[l]]) { flag=; break; }
if (!flag) cnt[S]++;
}
}
f[][]=;
rep(i,,n*m) for (int j=; j<(<<top); j++){
f[i][j]=(f[i][j]+1ll*f[i-][j]*max(cnt[j]-i+,))%mod;
rep(k,,top) if (j&(<<(k-)))
f[i][j]=(f[i][j]+f[i-][j^(<<(k-))])%mod;
}
return f[n*m][(<<top)-];
} void dfs(int x,int y,int t){
if (y==m+){ dfs(x+,,t); return; }
if (x==n+){ ans=(ans+dp()*(t&?-:))%mod; return; }
dfs(x,y+,t);
bool flag=;
rep(i,,) if (ch[x+dx[i]][y+dy[i]]=='X') { flag=; break; }
if (!flag) ch[x][y]='X',dfs(x,y+,t+),ch[x][y]='.';
} int main(){
freopen("bzoj2669.in","r",stdin);
freopen("bzoj2669.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%s",ch[i]+);
rep(i,,n) rep(j,,m) if (ch[i][j]=='X')
rep(k,,) if (ch[i+dx[k]][j+dy[k]]=='X') { puts(""); return ; }
dfs(,,); printf("%d\n",(ans+mod)%mod);
return ;
}
[BZOJ2669][CQOI2012]局部最小值(容斥+状压DP)的更多相关文章
- bzoj2669[cqoi2012]局部极小值 容斥+状压dp
2669: [cqoi2012]局部极小值 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 774 Solved: 411[Submit][Status ...
- ARC 093 F Dark Horse 容斥 状压dp 组合计数
LINK:Dark Horse 首先考虑1所在位置. 假设1所在位置在1号点 对于此时剩下的其他点的方案来说. 把1移到另外一个点 对于刚才的所有方案来说 相对位置不变是另外的方案. 可以得到 1在任 ...
- bzoj3812 主旋律 容斥+状压 DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3812 题解 考虑对于图的联通性的 DP 的一般套路:总方案 - 不连通的方案. 那么我们只需要 ...
- Comet OJ - Contest #7 C 临时翻出来的题(容斥+状压)
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 ...
- 【题解】CQOI2012局部最小值
上课讲的一道题,感觉也挺厉害的~正解是容斥 + 状压dp.首先我们容易发现一共可能的局部最小值数量是十分有限的,最多也只有 \(8\) 个.所以我们可以考虑状压. 建立出状态 \(f[i][j]\) ...
- BZOJ2669 [cqoi2012]局部极小值 状压DP 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2669 题意概括 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所 ...
- 【bzoj2669】[cqoi2012]局部极小值 容斥原理+状压dp
题目描述 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点)都小,我们说这个格子是局部极小值. 给出所有局部极小值的位置,你的任 ...
- HDU5731 Solid Dominoes Tilings 状压dp+状压容斥
题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hiho ...
- ARC093F Dark Horse 【容斥,状压dp】
题目链接:gfoj 神仙计数题. 可以转化为求\(p_1,p_2,\ldots,p_{2^n}\),使得\(b_i=\min\limits_{j=2^i+1}^{2^{i+1}}p_j\)都不属于\( ...
随机推荐
- MSSQL 构建临时表SQL
declare @StartQuarter int declare @StartYear int declare @EndQuarter int declare @EndYear int declar ...
- elementui raido 单选框 循环渲染加:key
<el-radio-group v-model="adminRole"> <el-radio v-for="item in adminRoles&quo ...
- 函数getopt()及其参数optind -- (转)
getopt被用来解析命令行选项参数 #include <unistd.h> extern char *optarg; //选项的参数指针 extern int ...
- LCD实验学习笔记(八):中断
s3c2440有60个中断源(其中15个为子中断源). 31个32位的通用寄存器,6个程序状态寄存器.有6种工作模式(系统/用户模式,快中断模式,管理模式,数据访问中止模式,中断模式,未定指令中止模式 ...
- 64_l5
libsmartcols-2.29.1-2.fc26.x86_64.rpm 13-Feb-2017 07:04 150590 libsmartcols-devel-2.29.1-2.fc26.i686 ...
- C基础 时间业务实战代码
引言 业务代码中遇到这样需求, 1. 二者是同一天吗, 2. 时间戳和时间串来回转, 3. 其它扩展需求 等. C写代码同样需要处理这方面时间问题. 本文就是为了解决这个问题. 相比其它时间库, 这里 ...
- ACE_INET_Addr类 API
ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内.方便用户 ...
- .net设置浏览器的文本模式
这段时间做个项目,做的时候因为之前习惯了Google的调试方式,所以就一直在google上面调试,今天项目成员大家的部分要整合,就放到ie8下面测试,但是遇到一个问题,就是用ie打开之后文本模式一直是 ...
- Hierarchical Attention Based Semi-supervised Network Representation Learning
Hierarchical Attention Based Semi-supervised Network Representation Learning 1. 任务 给定:节点信息网络 目标:为每个节 ...
- IntelliJ IDEA SpringBoot 使用第三方Tomcat以及部署
花了半天时间终于成功,记录以备查阅. 一.第三方Tomcat部署 部署部分参考的是:把spring-boot项目部署到tomcat容器中 目标:把spring-boot项目按照平常的web项目一样发布 ...