博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj1087] [SCOI2005]互不侵犯King
阅读量:5320 次
发布时间:2019-06-14

本文共 996 字,大约阅读时间需要 3 分钟。

一个n*n的棋盘,要在上面放国王,每个国王占领周围3*3的土地,求放置K个国王的方案数量。

一开始感觉结论题就打了个表,打一个8的表只要一两分钟⬇️,虽然说n<=9,但是9的估计要很久...说不定考试那几个小时都打不完。

 

 

 

说说正解吧。

考虑壮压dp,如果按照一个个位置dp需要记录轮廓线以及左上角那个位置的情况,但是显然我们不需要那么复杂。

情况数2^9=512   预先处理好  每种情况是否合法  需要多少国王  两种情况之间是否可以转移  ,就可以啦。

f[i][j][k]表示前i行用了j个国王,第i行状态是k的个数。复杂度n*K*2^(2*n)

#include
#include
#define ll long longusing namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}bool b[515][515];int n,K;ll f[10][105][515];int use[515];int main(){ n=read();K=read();int to=(1<
>=1; } if(use[i]!=-1) use[i]=tot; } for(int i=0;i
>1)))||(j&(k<<1))||(j&k))) {b[i][j]=0;break;} } f[0][0][0]=1; for(int i=1;i<=n;i++) for(int j=0;j<=K;j++) for(int k=0;k

 

转载于:https://www.cnblogs.com/FallDream/p/bzoj1087.html

你可能感兴趣的文章
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spring面试题
查看>>
C语言栈的实现
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
使用命令创建数据库和表
查看>>
linux下Rtree的安装
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
安卓当中的线程和每秒刷一次
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>