hihoCoder#1048 状态压缩·二
位运算的状态压缩太操蛋了,很容易出错。。。又是数组没开够导致诡异现象(明明某个值是1,莫名其妙就变成0了),害我debug一整天!fuck
代码:
#include <iostream>
#include <cstring> using namespace std; #define MAX_N 1024
#define MAX_M 8
#define MAX_S 4096
#define MOD 1000000007 int f[MAX_N][MAX_M][MAX_S];
int N, M; bool freep(int s, int o) {
return !(s & ( << o));
} int mark(int s, int o) {
return s |= ( << o);
} int mark(int s, int o1, int o2) {
return mark(s, o1) | mark(s, o2);
} int main() {
cin >> N >> M;
memset(f, , sizeof(f)); for (int i = ; i <= N; i++) {
for (int s = ; s < ( << ( * M + )); s++)
f[i][M + ][s] = ;
}
for (int j = ; j <= M; j++) {
for (int s = ; s < ( << ( * M + )); s++)
f[N + ][j][s] = ;
} for (int i = N; i >= ; i--) {
for (int j = M; j >= ; j--) {
for (int k = ( << ( * M)) - ; k >= ; k--) {
int s = k << ;
// pass
if (!freep(s, j)) {
if (j < M)
f[i][j][s] = f[i][j + ][s];
if (j == M)
f[i][j][s] = f[i + ][][(s >> M) >> << ];
}
if (freep(s, j)) {
// impossible
if ((j == M || !freep(s, j + )) && (i == N || !freep(s, j + M)))
f[i][j][s] = ;
// right
if (j < M && freep(s, j + ) && (i == N || !freep(s, j + M)))
f[i][j][s] += f[i][j][mark(s, j, j + )];
// down
if (i < N && freep(s, j + M) && (j == M || !freep(s, j + )))
f[i][j][s] += f[i][j][mark(s, j, j + M)];
// right & down
if (j < M && freep(s, j + ) && i < N && freep(s, j + M))
f[i][j][s] = (f[i][j][mark(s, j, j + )] + f[i][j][mark(s, j, j + M)]) % MOD;
}
}
}
} cout << f[][][] << endl; return ;
}
hihoCoder#1048 状态压缩·二的更多相关文章
- HihoCoder第九周 状态压缩 二 与POJ2411总结
在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了Hiho ...
- hihoCoder week8 状态压缩·一
状态压缩 写了两个半小时 太菜了 题目链接 https://hihocoder.com/contest/hiho8/problem/1 #include <bits/stdc++.h> ...
- [hihoCoder] #1044 : 状态压缩·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将 ...
- hihoCoder 1044 : 状态压缩·一 状压dp
思路:状态压缩,dp(i, j)表示考虑前i个数且[i-m+1, i]的选择情况为j.如果要选择当前这个数并且,数位1的个数不超过q,则dp[i+1][nex] = max(dp[i+1][nex], ...
- 【HIHOCODER 1048】 状态压缩·二
描述 历经千辛万苦,小Hi和小Ho终于到达了举办美食节的城市!虽然人山人海,但小Hi和小Ho仍然抑制不住兴奋之情,他们放下行李便投入到了美食节的活动当中.美食节的各个摊位上各自有着非常多的有意思的小游 ...
- 【hiho一下 第九周】 状态压缩·二
[题目链接]:http://hihocoder.com/problemset/problem/1048 [题意] [题解] 按从左到右然后从上到下的顺序; 依次枚举每个格子是竖条还是横条; 然后在搜索 ...
- hihocoder #1044 : 状态压缩·一 状压DP
http://hihocoder.com/problemset/problem/1044 可以看出来每一位的选取只与前m位有关,我们把每个位置起始的前m位选取状态看出01序列,就可以作为一个数字来存储 ...
- hihoCoder #1044 : 状态压缩·一 (清垃圾)
题意: 某车厢有一列座位,共有n个位置,清洁工要在这n个位置上清垃圾,但是不能全部位置都清理,只能选择部分.选择的规则是,连续的m个位置内,不能够清理超过q个,也就是说从第1~m个位置最多可以清q个, ...
- hihocoder 1334 - Word Construction - [hiho一下第170周][状态压缩+DFS]
题目链接:https://hihocoder.com/problemset/problem/1334 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given N wo ...
随机推荐
- A Simple Task CodeForces - 11D
A Simple Task CodeForces - 11D 题意:输出一个无向图的简单环数量.简单环指无重复边的环.保证图无重边自环. ans[i][j]表示"包含i中的点,以i中第一个点 ...
- 贪心 Codeforces Round #109 (Div. 2) B. Combination
题目传送门 /* 贪心:按照能选的个数和点数降序排序,当条件不符合就break,水题啊! */ #include <cstdio> #include <algorithm> # ...
- 32位Oracle10g在64位CentOS下安装失败记录
环境信息:Alibaba Cloud Elastic Compute Service,CentOS Linux release 7.4.1708 (Core),16C/64GB. 使用32位Oracl ...
- java getDocumentBase() 得到的文件夹路径
参考一个百度知道上的回答 举例说来,假设你的项目文件是xx,而这个xx文件夹是在D盘下的yy文件夹里,即项目文件的完整路径D:\yy\xx,则编译运行文件后,在xx文件夹里会产生名为build的文件夹 ...
- JS filters-ul li简单过滤
功能要求:在input中输入字母,显示ul li中匹配的元素,隐藏不匹配的 <!DOCTYPE html> <html> <head> <meta chars ...
- php debug/phpstorm调试
apache+phpstorm调试php代码,修改php.ini配置文件开启调试,没有以下代码加上即可, [XDebug]zend_extension="C:\php\php-7.0.12- ...
- 用unsigned char 表示字节
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...
- mybatis-paginator对SqlServer分页实现
package com.github.miemiedev.mybatis.paginator.dialect; import com.github.miemiedev.mybatis.paginato ...
- SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...
- C++学习随笔
今天试着变了下实验二里边的有关面向对象的实验,深深地觉得我对面向对象的编程的理解还是很浅显,以至于对于对象的调用也是瞎整.居然直接就去调用继承来的函数,连生成一个对象这种基础应用都不知道.对自己的基础 ...