bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp
唔...今天学了状压就练练手...
这题的话,我感觉算是入门题了QAQ...
然而我还是想了好久...
大致自己推出了方程,但是一直挂,调了很久选择了题解 坚持不懈的努力的调代码。
然后发现题解的方程和我一毛一样呀QAQ
然后就又开始无限调调调QAQ最后发现自己统计答案没放循环里...气哇QAQ看都之后哇的一声哭出来。
好吧进入正题吧。
设 f[i,j,k] 表示 放到第 i 行,第 i 行状态为 j 且总共放了 k 个的方案数。
然后方程就是 f[i,j,k+num[j]]+=f[i-1,x,k]
就是枚举一个 x 表示 第 i-1 层的状态,然后判其是否合法。
刚开始的时候懒的预处理,后来发现预处理代码更短就改了QAQ是的我是懒兔纸。
所以我萌预处理一个 num[i] 表示 状态为 i 中的 1 个数有多少个,也就是放了多少个国王。
顺便对于 不合法的状态 i 的num[i]=-1
然后对于枚举的每一个 x 直接暴力判 j 和 x 这两个状态合起来后是否合法。
暴力判的原因是我懒得预处理QAQ
然后 就枚举 k 表示 前 i-1 行已经放了 k 个国王。
辣么k+num[j] 就是第 i 行放完后的个数。
显然 k 的范围是 num[x]<=k<=m-num[j]
然后就愉快的水过去了,虽然wa了一次,因为longlong。
总的来说今天的状态压缩学得还不错=v=
var
i,j,k,x:longint;
n,m:longint;
f:array[..,..,..]of int64;
ans:int64;
num:array[..]of longint;
function isnot(i,x:longint):boolean;
begin
exit(( << (i-))and x>);
end;
function ok(x:longint):longint;
var i:longint;
num:longint;
begin
num:=;
for i:= to n do
begin
if isnot(i,x) and((i>)and isnot(i-,x)) then exit(-);
if isnot(i,x) then inc(num);
end;
exit(num);
end;
function check(x,y:longint):boolean;
var i:longint;
begin
for i:= to n do
begin
if isnot(i,x) then
if ((i>)and(isnot(i-,y)))or(isnot(i,y))or((i<n)and(isnot(i+,y))) then exit(false);
end;
exit(true);
end;
begin
read(n,m);
f[,,]:=;
for j:= to ( << n)- do
num[j]:=ok(j);
for i:= to n do
for j:= to ( << n)- do
begin
if num[j]>= then
begin
for x:= to( << n)- do
if (num[x]>=)and(check(j,x)) then
begin
for k:=num[x] to m do
if k+num[j]<=m then
inc(f[i,j,k+num[j]],f[i-,x,k]);
end;
end;
if i=n then inc(ans,f[i,j,m]);
end;
writeln(ans);
end.
bzoj1087
bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp的更多相关文章
- BZOJ1087 SCOI2005 互不侵犯King 【状压DP】
BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...
- 状压入门--bzoj1087: [SCOI2005]互不侵犯King【状压dp】
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...
- BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)
[SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...
- [Bzoj1083][SCOI2005]互不侵犯king(状压dp)
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4595 Solved: 2664[Submit][ ...
- 【BZOJ1087】[SCOI2005] 互不侵犯King(状压DP)
点此看题面 大致题意: 在\(N×N\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案(国王能攻击到它周围的8个格子). 状压\(DP\) 一看到这道题我就想到了经典的八皇后问题,但 ...
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...
- 1087. [SCOI2005]互不侵犯King【状压DP】
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...
- BZOJ 1087 [SCOI2005]互不侵犯King(状压DP)
题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.n<=9 思路:状压dp,dp[i][ ...
- [luoguP1896] [SCOI2005]互不侵犯King(状压DP)
传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...
随机推荐
- Every write operation executed on a document, deletes included
Delete API | Elasticsearch Reference [6.5] | Elastic https://www.elastic.co/guide/en/elasticsearch/r ...
- python基础-第五篇-5.3装饰器
小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白 ...
- d3.js 之增加感染力:使用转场效果
转场/transition 图形比数据有感染力,动起来的图形比静态的图形更有感染力. 转场是一种过渡,提供两个稳定状态间的一种动态渐进的变化.转场的概念来源于电影. 电影中存在不同场景之间的切换,比如 ...
- 设计模式C++实现——适配器模式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/walkerkalr/article/details/29863177 模式定义: 适 ...
- vxworks 的 socket, thread, 信号量模型
http://www.vxdev.com/docs/vx55man/vxworks/netguide/c-sockets.html http://www.vxdev.com/docs/vx55man/ ...
- 安装CentOS 7 文字版
下载镜像 http://mirrors.163.com/ CentOS 7.4 http://mirrors.163.com/centos/7.4.1708/isos/x86_64/ 选择 CentO ...
- Linux的日志管理
Linux日志的管理 日志:记录了你几乎所有的操作记录,用于系统的审核,故障的排除.日志文件永久存放在日志目录中,系统日志保存在/var/log中 rsyslog 按照日志类型分类,把所有日志记录到/ ...
- C++学习笔记-const和static
const 1.使用const来定义常量 const int num = 10; //应该在声明时进行初始化,否则该常量的值是不确定的,而且无法修改 2.const与指针 指向常量的指针(const修 ...
- Linux服务器access_log日志分析及配置详解(二)
默认nginx / Linux日志在哪个文件夹? 一般在 xxx.xxx.xxxx.com/home/admin 路径下面的error.log文件和access.log文件error_log logs ...
- Apple Pay编程指导
1.About Apple PayApple Pay是一种移动支付技术,让使用者把它们对真实的物品和服务的支付信息以一种方便和安全的方式给你. 对于在app中给出的数字物品和服务,可查看In-App ...