Codeforces 342D Xenia and Dominoes 状压dp
码就完事了。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long using namespace std; const int N = 1e4 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-;
const double PI = acos(-); template<class T>
void add(T &a, T b) {
a += b; if(a >= mod) a -= mod;
} int n, tx, ty;
int dp[N][ << ][];
int state[N];
char Map[][N]; bool can(int x, int y, int op) {
if(op == ) return Map[x][y] == '.' && Map[x][y + ] == '.';
else return Map[x][y] == '.' && Map[x + ][y] == '.';
} bool ok(int x, int y, int op) {
if(op == ) {
if(x != tx) return false;
return y + == ty || y - == ty;
} else {
if(y != ty) return false;
return x + == tx || x - == tx;
}
} int main() {
scanf("%d", &n);
for(int i = ; i < ; i++) scanf("%s", Map[i] + );
for(int i = ; i < ; i++) {
for(int j = ; j <= n; j++) {
if(Map[i][j] == 'O') {
tx = i;
ty = j;
i = ;
break;
}
}
}
for(int j = ; j <= n; j++) {
for(int i = ; i < ; i++)
if(Map[i][j] != '.') state[j] |= << i;
}
dp[][state[]][] = ;
for(int j = ; j <= n; j++) {
for(int mask = ; mask < ( << ); mask++) {
for(int k = ; k < ; k++) {
if(mask == ) {
if(can(, j, ) && can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, ) || ok(, j, )], dp[j][mask][k]);
if(can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, )], dp[j][mask][k]);
if(can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, )], dp[j][mask][k]); } else if(mask == ) {
if(can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, )], dp[j][mask][k]);
if(can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, )], dp[j][mask][k]); } else if(mask == ) { if(can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, )], dp[j][mask][k]); } else if(mask == ) { if(can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, )], dp[j][mask][k]); } else if(mask == ) {
if(can(, j, ) && can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, ) || ok(, j, )], dp[j][mask][k]);
if(can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, )], dp[j][mask][k]); } else if(mask == ) { if(can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, )], dp[j][mask][k]); } else if(mask == ) { if(can(, j, ))
add(dp[j + ][ | state[j + ]][k || ok(, j, )], dp[j][mask][k]); } else if(mask == ) { add(dp[j + ][ | state[j + ]][k], dp[j][mask][k]); }
}
}
}
printf("%d\n", dp[n + ][][]);
return ;
} /*
*/
Codeforces 342D Xenia and Dominoes 状压dp的更多相关文章
- Codeforces Round #363 LRU(概率 状压DP)
状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #incl ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- Codeforces 429C Guess the Tree(状压DP+贪心)
吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...
- Codeforces 895C Square Subsets(状压DP 或 异或线性基)
题目链接 Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的 ...
- 【题解】codeforces 8c Looking for Order 状压dp
题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...
- codeforces 342D Xenia and Dominoes(状压dp+容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud D. Xenia and Dominoes Xenia likes puzzles ...
- Codeforces 895C Square Subsets:状压dp【组合数结论】
题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...
- CodeForces 599E Sandy and Nuts 状压DP
题意: 有一棵\(n(1 \leq n \leq 13)\)个节点的树,节点的标号为\(1 \sim n\),它的根节点是\(1\). 现在已知它的\(m(0 \leq m < n)\)条边,和 ...
- codeforces 580D Kefa and Dishes(状压dp)
题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值.问如果吃m个菜,最大价值是多大.其中n<=18 思路:一看n这么小 ...
随机推荐
- pwnable.kr simple login writeup
这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程 主要逻辑是输入一个字符串,base64解码后看是否与题目 ...
- mysql 5.6 windows 启动脚本
2018-4-25 17:02:08 星期三 下载mysql 5.6 zip(免安装版)到本机 一台电脑上可能装有多个版本的mysql, 启动时为了不影响: 1. 解压后文件夹根目录改名为 mysql ...
- LabVIEW与Arduino的连接
labVIEW和Arduino的连接有两种方法: 第一种方法是用Arduino的IDE去打开位于labVIEW文件目录下面的(C:\Program Files (x86)\National Instr ...
- 根据CAS协议写的简单的SSO框架
前言: 考虑到现在分布式应用都不可或缺的一个重要部分:单点登录,决定花点时间去学下.本来想直接上现成的CAS框架的,初步的了解了一下后,觉得这个太庞大了,而且不好定制,要完全深度用起来也没那么简单 ...
- [转]MySQL常用Json函数和MySQL常用字符串函数
MySQL常用Json函数:https://www.cnblogs.com/waterystone/p/5626098.html MySQL常用字符串函数:https://www.cnblogs.co ...
- spring-data-redis和jedis版本对应问题
项目中使用spring-data-redis总是出现跟jedis版本不一致的问题而导致异常. java.lang.ClassNotFoundException 下面就记录两者版本对应关系: sprin ...
- 43)django-用户认证,授权,自定义用户认证
##用户认证 django自带用户认证系统,包括认证和授权.用户认证系统由用户,权限,用户组,密码,cookie和session给组成. ###用户认证系统设置 #settings.py INSTAL ...
- vue入手
https://www.jianshu.com/p/dc5057e7ad0d (最全入坑教程) http://doc.liangxinghua.com/vue-family/1.4.html(v ...
- Confluence 6 配置草稿保存的时间
这个设置仅仅应用到 Confluence 6.0 及后续版本中,如果你选择 禁用(disable )collaborative editing. 当协同编辑被启用后,我们将会保存所有的修改. 当协同编 ...
- ios 逆向编程(环境搭建)
首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1, 首先要有一台越狱的手机 最好是9.1以下的,因为9.2以上(包括9.2)就不能完美越狱了 2,手机也要5s以上的(因为从 ...