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;
}

最新文章

  1. Linux基础练习题
  2. java4
  3. mybais整合的框架没有sql-debug输出
  4. 9本java程序员必读的书(附下载地址)
  5. HDU2896 病毒侵袭
  6. sql install error
  7. 统计学习方法笔记 -- Boosting方法
  8. 两个for循环例子
  9. A. Difference Row
  10. Java异常处理面试题归纳
  11. yaml 1.6 操作
  12. Python打印格式化与字符串
  13. 非确定有限状态自动机的构建(一)——NFA的定义和实现
  14. 4.4、Libgdx用法查询执行环境相关性
  15. 由Spring框架中的单例模式想到的
  16. hdu4678 Mine 2013 Multi-University Training Contest 8 博弈题
  17. Java-JSON 解析
  18. github/gitlab同时管理多个ssh key
  19. jQuery之制作简单的轮播图效果
  20. JDK源码分析(6)ConcurrentHashMap

热门文章

  1. ROS会议 ROSCon 2017
  2. POJ2728 Desert King 最优比率生成树
  3. 7-8 List Leaves(25 分)
  4. [TopCoder11557]MatrixPower
  5. Python编程核心内容 ---- Function(函数)
  6. vs2005新建项目中没有ASP.NET WEB应用程序的解决方法
  7. ffmpeg C++程序编译时报__cxa_end_catch错误
  8. Android Studio中 ADB WIFI插件进行无线调试实践
  9. 远程连接Linux虚拟机上的mysql失败的解决方法
  10. 【推荐】开源来自百度商业前端数据可视化团队的超漂亮动态图表--ECharts