[状压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列组成, ...
随机推荐
- npm & app-node-env
npm & app-node-env $ npm i -g app-node-env # OR $ yarn global add app-node-env demo $ ane env=ap ...
- Serverless & Cloudflare Workers
Serverless & Cloudflare Workers https://dash.cloudflare.com/6f3d5e68ab80892a372313b7c9b02a85/wor ...
- iframe 父子互传消息,父页面滚动,子页面触发父页面高度
https://blog.csdn.net/qq_38366657/article/details/81538145 // 父页面的js<iframe id='TopHeader' src=&q ...
- NGK公链有发展前景吗?
最近网络中经常能看到一个新公链项目NGK的消息,很多朋友也都私下表示过,非常看好今年的NGK.对此,小编对NGK做了一些功课,发觉到NGK未来在商业Dapp应用的发展前景,下面就给大家分享一下我的理解 ...
- 别再人云亦云了!!!你真的搞懂了RDD、DF、DS的区别吗?
几年前,包括最近,我看了各种书籍.教程.官网.但是真正能够把RDD.DataFrame.DataSet解释得清楚一点的.论据多一点少之又少,甚至有的人号称Spark专家,但在这一块根本说不清楚.还有国 ...
- java自学第5期——Object、Date、Calender、System、StringBuilder、基本类型包装类
一.Object类 作用:对象操作 位置:java.lang.Object 方法: public String toString() :返回对象的字符串表示形式. public boolean equ ...
- linux调度全景指南
- 02.从0实现一个JVM语言之词法分析器-Lexer-03月02日更新
从0实现JVM语言之词法分析器-Lexer 本次有较大幅度更新, 老读者如果对前面的一些bug, 错误有疑问可以复盘或者留言. 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个s ...
- HDOJ-4027(线段树+区间更新(每个节点更新的值不同))
Can You answer these queries? HDOJ-4027 这道题目和前面做的题目略有不同.以前的题目区间更新的时候都是统一更新的,也就是更新相同的值.但是这里不一样,这里更新的每 ...
- 【转载】Java虚拟机类加载机制与案例分析
出处:https://blog.csdn.net/u013256816/article/details/50829596 https://blog.csdn.net/u013256816/articl ...