[状压DP]车II
车
I
I
车II
车II
题目描述
有一个
n
∗
m
n*m
n∗m的棋盘
(
n
、
m
≤
80
,
n
∗
m
≤
80
)
(n、m≤80,n*m≤80)
(n、m≤80,n∗m≤80)要在棋盘上放
k
(
k
≤
20
)
k(k≤20)
k(k≤20)个棋子,使得任意两个棋子不相邻。求合法的方案总数。
输入
n
,
m
,
k
n,m,k
n,m,k
输出
方案总数
样例输入
3 3 2
样例输出
24
题目解析
又双叒叕是一道状压DP的题。和车相比,这道题的数据就大了许多
n
、
m
≤
80
n、m≤80
n、m≤80。然而
n
∗
m
≤
80
n*m≤80
n∗m≤80,所以还是可以用状压来写。
首先,我们用一个
D
F
S
DFS
DFS来枚举他所有的状态
void dfs(int ans, int pos, int flag)
{
if(pos>n)
{
s[++num]=ans;
c[num]=flag;
return ;
}
dfs(ans, pos+1, flag);
dfs(ans+(1<<pos-1), pos+2, flag+1);
}
然后就开始
D
P
DP
DP;用两个变量来枚举状态,分别为当前状态和转移状态,要想它们之间能够互相转移,就必须有一个为
0
0
0,然后在枚举放的棋子个数。
code
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int n, m, k, num;
int s[10005], c[10005], f[85][1<<9][255];
void dfs(int ans, int pos, int flag)
{
if(pos>n)
{
s[++num]=ans;
c[num]=flag;
return ;
}
dfs(ans, pos+1, flag);
dfs(ans+(1<<pos-1), pos+2, flag+1);
}
int main ()
{
scanf ("%d%d%d", &n, &m, &k);
if (n>m) swap(n,m);
dfs(0, 1, 0);
for (int i=1; i<=num; ++i) f[1][s[i]][c[i]]=1;
for (int i=2; i<=m; ++i)
for (int j=1; j<=num; ++j)
for (int r=1; r<=num; ++r)
if (!(s[j]&s[r]))
{
for (int l=0; l<=k; ++l)
if (l>=c[j])
f[i][s[j]][l]+=f[i-1][s[r]][l-c[j]];
}
int ans=0;
for (int i=1; i<=num; ++i) ans+=f[m][s[i]][k];
printf("%d",ans);
return 0;
}
[状压DP]车II的更多相关文章
- [状压DP]车
车 车 车 题目描述 在 n ∗ n n*n n∗n( n ≤ 20 n≤20 n≤20)的方格棋盘上放置 n n n个车(可以攻击所在行.列),有些格子不能放,求使它们不能互相攻击的方案总数. 输入 ...
- 状压DP【p2622】 关灯问题II
题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...
- 关灯问题II 状压DP
关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...
- [状压DP]关灯问题II
关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...
- HDU 6149 Valley Numer II 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...
- HDU 6149 Valley Numer II(状压DP)
题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...
- 洛谷 P2622 关灯问题II【状压DP】
传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...
- 状压dp专题复习
状压dp专题复习 (有些题过于水,我直接跳了) 技巧总结 : 1.矩阵状压上一行的选择情况 \(n * 2^n\) D [BZOJ2734][HNOI2012]集合选数 蒻得不行的我觉得这是一道比较难 ...
- [状压DP]炮兵阵地
炮 兵 阵 地 炮兵阵地 炮兵阵地 题目描述 司令部的将军们打算在 N ∗ M N*M N∗M的网格地图上部署他们的炮兵部队.一个 N ∗ M N*M N∗M的地图由 N N N行 M M M列组成, ...
随机推荐
- js 如何取消promise
1: 使用reject function hello() { let _res, _rej: any; const promise = new Promise((res, rej) => { _ ...
- 在.NET中使用Apache Kafka(一)
曾经在你的应用程序中使用过异步处理吗?在处理不需要立即执行的任务时,异步代码似乎是不可避免的.Apache Kafka是最常用和最健壮的开源事件流平台之一.许多公司和开发者利用它的强大功能来创建高性 ...
- 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐
最近这段时间频频看到微信群里发什么 抢票加速,智行.携程.飞猪.美团,对于我这能坐客车就不坐火车的人来说,无所谓靠谱不靠谱 突发奇想的整理了下整个抢票加速的逻辑,写了这个小程序,代码很low,拒绝批评 ...
- 1.代码规范之 if 语句编写
最近在看项目代码的时候, 看到需要判断的地方,出现了if的多重嵌套, 甚至是出现了十几层的嵌套, 代码的阅读性非常之差. 简单的举个例子(这里只是两层的嵌套): public class demo ...
- Linux常用操作命令之文件权限(二)
一.基本概念 Linux/Unix是多用户系统:root是超级用户,拥有最高权限,其他用户及权限由root管理.文件/目录的权限有三种,可读read(r)可写write(w)可执行excute(x). ...
- 如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情?
如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情? 答:跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求.利用受害者在被攻击网站已经获取的注册凭证 ...
- 2020年12月-第01阶段-前端基础-HTML常用标签
1. HTML常用标签 首先 HTML和CSS是两种完全不同的语言,我们学的是结构,就只写HTML标签,认识标签就可以了. 不会再给结构标签指定样式了. HTML标签有很多,这里我们学习最为常用的,后 ...
- ElasticSearch 进阶
目录 ElasticSearch 进阶 SearchAPI 检索信息 Query DSL 基本语法格式 查询-match 查询-match_phrase 查询-multi_match 查询-bool复 ...
- WPF 基础 - 图形的效果与滤镜
UIElement 有 BitmapEffect 和 Effect 属性,BitmapEffect 是由 CPU 的运算能力实现的,比较耗性能,推荐使用 Effect: Effect 包括但不限于 D ...
- BeanShell 用法汇总
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...