【洛谷P1896】互不侵犯
题目大意:给定 N*N 的棋盘,一共放 K 个国王,一共有多少种方法。
题解:
i&i<<1
判断是否每个 1 的位置之间都有 0。i&j<<1
判断 i 中为 1 的位置与 j 中为 1 的位置是否存在右下角的影响。
相比于铺砖问题,此题仅仅多了一个必须要放 k 个国王,那在此基础上加一个维度,表示放了多少个国王即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt[1<<9];
long long f[10][1<<9][100];
bool ins[1<<9];
void read_and_parse(){
scanf("%d%d",&n,&m);
for(int i=0;i<1<<n;i++)if(!(i&i<<1)){
ins[i]=1;
int res=0;
for(int j=0;j<n;j++)if(i>>j&1)++res;
cnt[i]=res;
}
}
void solve(){
f[0][0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<1<<n;j++)if(ins[j])
for(int k=0;k<1<<n;k++)if(ins[k]&&(j&k)==0&&(j&k<<1)==0&&(j&k>>1)==0)
for(int w=m;w>=cnt[j];w--)
f[i][j][w]+=f[i-1][k][w-cnt[j]];
long long ans=0;
for(int i=0;i<1<<n;i++)if(ins[i])ans+=f[n][i][m];
printf("%lld\n",ans);
}
int main(){
read_and_parse();
solve();
return 0;
}
【洛谷P1896】互不侵犯的更多相关文章
- 洛谷 P1896 互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- 状压DP概念 及例题(洛谷 P1896 互不侵犯)
状压DP 就是状态压缩DP.所谓状态压缩,就是将一些复杂的状态压缩起来,一般来说是压缩为一个二进制数,用01来表示某一元素的状态. 比如一排灯泡(5个) 我们可以用一串二进制01串来表示他们的状态 1 ...
- 洛谷P1896 互不侵犯
又是一道状压DP求方案数的题... 多了一个放k个的限制,于是我们把数组多开一维. f[i][j][k]表示前i行放了j个,第i行状态为k的方案数. 然后老套路DFS转移,这次要多记录一个cnt表示上 ...
- 洛谷 P1896 [SCOI2005]互不侵犯
洛谷 P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8 ...
- 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...
- 洛谷P1896||bzoj1087 [SCOI2005]互不侵犯
bzoj1087 洛谷P1896 想了很久,太久没做状压都已经不会了... 状压每一行就好了 #include<cstdio> #include<algorithm> #inc ...
- 状压DP【洛谷P1896】 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- 洛谷P1896 [SCOI2005]互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- 洛谷——P1896 [SCOI2005]互不侵犯
P1896 [SCOI2005]互不侵犯 状压DP入门题 状压DP一般需要与处理状态是否合法,节省时间 设定状态dp[i][j][k]表示第i行第j个状态选择国王数为k的方案数 $dp[i][j][n ...
- BZOJ1087=Codevs2451=洛谷P1896&P2326互不侵犯
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2885 Solved: 1693[Submit][ ...
随机推荐
- java随笔1 Ctrl+1补全
Ctrl+1补全变量时,如果补全后的不是自己想要的, 比如:补全后这样 修改后 这时要对更改变量进行Ctrl+1补全路径 并且后者要进行Ctrl+1强转
- NOIP2015提高组复赛B 子串
题目链接:https://ac.nowcoder.com/acm/contest/263/B 题目大意: 略 分析: 设preA(i)为字符串A中第1个字符到第i个字符构成的字符串. 设preB(i) ...
- RedHat 安装RabbitMQ
(以下均以root用户执行) 1.安装配置epel源rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noar ...
- CDH 6.0.1 集群搭建 「Before install」
从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ...
- HeapSter安装(k8s1.12以后废弃了)
HeapSter InfluxDB(持久存储) Grafana 展示InfluxDB的数据(类似kibana) #安装InfluxDB #github https://github.com/kuber ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- Puppet日常总结
在工作中常常会有这样一种需求:某几个人需要某些测试服务器的root权限.比如,开发部门的张三,李四,王五,赵六需要rsync服务器的root权限.有些同学会说那直接 visudo在里面添加几个人不就行 ...
- JavaSE从入门到精通
1.JavaSE的安装 windows下安装完成后,配置环境变量如下: JAVA_HOME C:\Program Files (x86)\Java\jdk1.8.0_91 CLASSP ...
- html class选择器与id选择器
class选择器: <p class="p1"> .p1{ color:red; ..... } id选择器: <p id="p2"> ...
- Java 下载 HLS (m3u8) 视频
下载索引文件 public String getIndexFile() throws Exception{ URL url = new URL(originUrlpath); //下载资源 Buffe ...