【bzoj1087】互不侵犯King 状态压缩dp
2024-10-19 06:25:18
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1087
【题解】
用f[i][j][k]表示前i行放了j个棋子且第i行的状态为k的方案数。
vis[i]表示状态i是否合法,check[i][j]表示状态i,j是否可以相邻。
详见代码:
/*************
bzoj 1087
by chty
2016.11.15
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define FILE "read"
#define up(i,j,n) for(ll i=j;i<=n;i++)
namespace INIT{
char buf[1<<15],*fs,*ft;
inline char getc() {return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline ll read() {
ll x=0,f=1; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getc();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getc();}
return x*f;
}
}using namespace INIT;
ll n,m,ans,vis[1<<9],sum[1<<9],check[1<<9][1<<9],f[11][121][1<<9];
void pre(){
up(i,0,(1<<n)-1)if(!(i&(i<<1))){vis[i]=1; for(ll x=i;x;x>>=1) sum[i]+=(x&1);}
up(i,0,(1<<n)-1){
if(!vis[i]) continue;
up(j,0,(1<<n)-1){
if(!vis[j]||(i&j)||(i&(j>>1))||(j&(i>>1))) continue;
check[i][j]=1;
}
}
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=read(); m=read();
pre(); up(i,0,(1<<n)-1) if(vis[i]) f[1][sum[i]][i]=1;
up(i,2,n)up(j,0,(1<<n)-1){
if(!vis[j]) continue;
up(k,0,(1<<n)-1){
if(!vis[k]||!check[j][k]) continue;
up(p,sum[k],m-sum[j]) f[i][p+sum[j]][j]+=f[i-1][p][k];
}
}
up(i,0,(1<<n)-1) ans+=f[n][m][i];
printf("%lld\n",ans);
return 0;
}
最新文章
- Linux基础练习题
- java4
- mybais整合的框架没有sql-debug输出
- 9本java程序员必读的书(附下载地址)
- HDU2896 病毒侵袭
- sql install error
- 统计学习方法笔记 -- Boosting方法
- 两个for循环例子
- A. Difference Row
- Java异常处理面试题归纳
- yaml 1.6 操作
- Python打印格式化与字符串
- 非确定有限状态自动机的构建(一)——NFA的定义和实现
- 4.4、Libgdx用法查询执行环境相关性
- 由Spring框架中的单例模式想到的
- hdu4678 Mine 2013 Multi-University Training Contest 8 博弈题
- Java-JSON 解析
- github/gitlab同时管理多个ssh key
- jQuery之制作简单的轮播图效果
- JDK源码分析(6)ConcurrentHashMap
热门文章
- ROS会议 ROSCon 2017
- POJ2728 Desert King 最优比率生成树
- 7-8 List Leaves(25 分)
- [TopCoder11557]MatrixPower
- Python编程核心内容 ---- Function(函数)
- vs2005新建项目中没有ASP.NET WEB应用程序的解决方法
- ffmpeg C++程序编译时报__cxa_end_catch错误
- Android Studio中 ADB WIFI插件进行无线调试实践
- 远程连接Linux虚拟机上的mysql失败的解决方法
- 【推荐】开源来自百度商业前端数据可视化团队的超漂亮动态图表--ECharts