首页 技术 正文
技术 2022年11月14日
0 收藏 917 点赞 4,823 浏览 770 个字

P2327 [SCOI2005]扫雷

emmmmm…..这题真可以用状压写

因为每个数字只对3个格子有影响,相当于只有2^3=8种状态,所以可以用状压瞎搞

我们用8个数字代表二进制下的8种状态

0 000 ; 1 001 ; 2 010 ; 3 011 ;

4 100 ; 5 101 ; 6 110 ; 7 111 ;

0/1表示无/有雷

设 f[ i ][ j ]表示在第 i-2 ~ i 个格子的状态为 j 的方案数

状态转移时(设当前状态为 i)相当于 f[ i+1 ][ j ]=f[ i ][ j>>1 ]+f[ i ][ j>>1|1 ]

但是我懒得写判断所以直接手算可行转移了(逃

注意不能省略 三个格都为0的情况

#include<cstdio>
using namespace std;
int n,f[][];
int main(){
scanf("%d",&n); int opt;
scanf("%d",&opt);
if(opt==) f[][]=f[][]=;
else if(opt==) f[][]=;
else if(opt==) f[][]=;
for(int i=;i<=n;++i){//把数字转二进制自己观察吧qwq
scanf("%d",&opt);
if(opt==){
f[i+][]=f[i][]+f[i][];
f[i+][]=f[i][]+f[i][];
f[i+][]=f[i][]+f[i][];
}else if(opt==){
f[i+][]=f[i][]+f[i][];
f[i+][]=f[i][]+f[i][];
f[i+][]=f[i][]+f[i][];
}else if(opt==) f[i+][]=f[i][]+f[i][];
else f[i+][]=f[i][]+f[i][];
}
printf("%d",f[n+][]+f[n+][]+f[n+][]+f[n+][]); //注意第 n+1 个格子必须为0
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,116
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,588
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,433
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,204
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,840
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,925