【BZOJ】【1087】【SCOI2005】互不侵犯King
状压DP
我写的太水了……64ms才过,估计还有更好的做法,希望各位神犇不吝赐教>_<。
嗯这题很明显每一行都可以用一个2进制数表示放置方式的,(1表示放,0表示不放)。然后预处理一下所有合法状态(同一行内的国王之间不会互相攻击),然后记f[i][j][k]为第i行,用第j种合法放置方式放国王,总共放了k个国王的方案数,转移的时候枚举上一行的状态,看是否和这一行的冲突(和预处理一样可以用位运算加速),然后累加即可,很基础的状压DP。
WA了一次的原因:最后答案可能会爆int,必须用longlong(或者unsigned int也行吧?)
/**************************************************************
Problem: 1087
User: ProgrammingApe
Language: C++
Result: Accepted
Time:64 ms
Memory:8480 kb
****************************************************************/ //BZOJ 1087
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int n,K,num[],a[],cnt;
long long f[][][]; int count(int x){
int ans=;
while(x){ans+=x&; x>>=;}
return ans;
} int main(){
// freopen("file.in","r",stdin);
scanf("%d%d",&n,&K);
F(i,,(<<n)-){
int s=count(i);
if ((s>K) || (i&(i>>)) || (i&(i<<))) continue;
a[++cnt]=i;
num[cnt]=s;
}
F(j,,cnt)
f[][j][num[j]]=;
F(i,,n)
F(j,,cnt)
F(m,,n*n)
F(k,,cnt){
if (f[i-][j][m]==) continue;
if ( (a[j]&a[k]) || (a[j]&(a[k]>>)) || (a[j]&(a[k]<<)) || m+num[k]>K) continue;
f[i][k][num[k]+m]+=f[i-][j][m];
}
long long ans=;
F(j,,cnt) ans+=f[n][j][K];
printf("%lld\n",ans);
return ;
}
【BZOJ】【1087】【SCOI2005】互不侵犯King的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...
- bzoj[1087][SCOI2005]互不侵犯King
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- bzoj 1087: [SCOI2005]互不侵犯King【状压dp】
显然是状压,设f[i][j][k]为1到i行选j个king,并且第i行状态为k的方案数,判断是否可行然后枚举转移即可 先把可行状态预处理出来会变快 #include<iostream> # ...
- BZOJ 1087 [SCOI2005]互不侵犯King(状压DP)
题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.n<=9 思路:状压dp,dp[i][ ...
- BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
[题目分析] 沉迷水题,吃枣药丸. [代码] #include <cstdio> #include <cstring> #include <iostream> #i ...
- 1087: [SCOI2005]互不侵犯King
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4276 Solved: 2471[Submit][ ...
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...
- 【BZOJ】1087: [SCOI2005]互不侵犯King
[算法]状态压缩型DP [题解]http://www.cnblogs.com/xtx1999/p/4620227.html (orz) https://www.cnblogs.com/zbtrs/p/ ...
- 1087. [SCOI2005]互不侵犯King【状压DP】
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...
随机推荐
- Winform 打开下载的文件
private void OpenFile(string filename) { ProcessStartInfo sInfo = new ProcessStartInfo(); sInfo.Wind ...
- MHA学习笔记
MHA是一款开源的MySQL高可用程序,为MySQL主从复制架构提供了节点故障转移功能,当 master发生故障时MHA会自动提升拥有最新数据的slave节点成为新的主节点,还提供了master节 点 ...
- PHP四大安全策略
PHP中的文件系统安全.数据库安全.用户数据安全等安全相关的问题. 一.文件系统安全 php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件 & ...
- Laravel 5 基础(六)- 数据库迁移(Migrations)
database migrations 是laravel最强大的功能之一.数据库迁移可以理解为数据库的版本控制器. 在 database/migrations 目录中包含两个迁移文件,一个建立用户表, ...
- 生日蛋糕 (codevs 1710) 题解
[问题描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri,高度为Hi的圆柱 ...
- asp.net 发布后用IP访问正常,用机器名访问布局出错
问题如题[发布后IP访问正常,用机器名访问布局出现问题] 出现此问题的原因:IE文档模型发生变化,比如ip访问时IE文档模型为:IE10,换用机器名访问时,文档模型变为IE7 解决方法:设置默认IE版 ...
- 在EF的code frist下写稳健的权限管理系统:仓储设计(三)
public class BaseRepository<T>:IBaseRepository<T> where T : class { protected EfConnecti ...
- python分片
刚刚学习,很新 >>> numbers = [1,2,3,4,5,6,7,8,9,10] >>> numbers[0:10:2] [1,3,5,7,9] >& ...
- Android操作系统11种传感器介绍
我们依次看看这十一种传感器 1 加速度传感器 加速度传感器又叫G-sensor,返回x.y.z三轴的加速度数值. 该数值包含地心引力的影响,单位是m/s^2. 将手机平放在桌面上,x轴默认为0,y轴默 ...
- TFS使用指南
上一篇文章已经简略介绍过TFS的安装与管理,本篇文章主要描述一下我个人在工作过程中使用TFS的一些指南与建议.本章内容预览: 1. 项目计划与跟踪 经常有很多朋友在日常聊天中抱怨做计划很无畏,因为计 ...