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的更多相关文章

  1. [状压DP]车

    车 车 车 题目描述 在 n ∗ n n*n n∗n( n ≤ 20 n≤20 n≤20)的方格棋盘上放置 n n n个车(可以攻击所在行.列),有些格子不能放,求使它们不能互相攻击的方案总数. 输入 ...

  2. 状压DP【p2622】 关灯问题II

    题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...

  3. 关灯问题II 状压DP

    关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...

  4. [状压DP]关灯问题II

    关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...

  5. HDU 6149 Valley Numer II 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...

  6. HDU 6149 Valley Numer II(状压DP)

    题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...

  7. 洛谷 P2622 关灯问题II【状压DP】

    传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...

  8. 状压dp专题复习

    状压dp专题复习 (有些题过于水,我直接跳了) 技巧总结 : 1.矩阵状压上一行的选择情况 \(n * 2^n\) D [BZOJ2734][HNOI2012]集合选数 蒻得不行的我觉得这是一道比较难 ...

  9. [状压DP]炮兵阵地

    炮 兵 阵 地 炮兵阵地 炮兵阵地 题目描述 司令部的将军们打算在 N ∗ M N*M N∗M的网格地图上部署他们的炮兵部队.一个 N ∗ M N*M N∗M的地图由 N N N行 M M M列组成, ...

随机推荐

  1. text to JSON

    text to JSON GeoLocaltion API https://www.cnblogs.com/xgqfrms/p/13283680.html https://repl.it/@xgqfr ...

  2. shit nuxt.js sensors-data

    shit nuxt.js sensors-data why I can not close it? https://github.com/nuxt/nuxt.js/issues?q=sensors+d ...

  3. HTML Imports & deprecated

    HTML Imports & deprecated https://caniuse.com/#search=html imports https://www.chromestatus.com/ ...

  4. 同步vscode的setting.json和extensions

    vc 详情 $ npm i -g vscode-config $ vc config --token <your github token> $ vc config --id <yo ...

  5. [转]ROS中使用message_filters进行多传感器消息同步

    转:http://www.rosclub.cn/post-1030.html 最近实验室老师在做一个多传感器数据采集实验,涉及到了消息同步.所以就学习了ROS官网下的消息同步工具message_fil ...

  6. Python算法_两数之和(01)

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用两遍. ...

  7. JVM性能调优经验总结

    本文转载自JVM性能调优经验总结 说明 调优是一个循序渐进的过程,必然需要经历多次迭代,最终才能换取一个较好的折中方案. 在JVM调优这个领域,没有任何一种调优方案是适用于所有应用场景的,同时,切勿极 ...

  8. JDK源码阅读-DirectByteBuffer

    本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计.但是他是一个抽象类,真正的实现分为两类:HeapB ...

  9. 详解Go语言调度循环源码实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/448 本文使用的go的源码15.7 概述 提到"调度&q ...

  10. Using Sqoop to import from db2 to hadoop

    参考 : https://stackoverflow.com/questions/23933481/db2-data-import-into-hadoop         sqoop import - ...