题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4529

题意:中文,不解释

题解:状压DP,dp[i][j][k][s]表示第i行当前用了j个骑士,i-1行的压缩状态为k,i行的压缩状态为j,然后用滚动数组优化了一下,注意如果不预处理不可存放位置会超时

 #include<cstdio>
#include<cstring>
#define N (1<<8)
#define FFC(i,a,b) for(int i=a;i<=b;++i) int T,n,dp[][][N][N],g[N],num[N],f1[N][N],f2[N][N],cur,ans; void init(){//预处理不可放的位置,和每一个压缩状态的骑士数目
FFC(i,,N-){
FFC(j,,)if(i&(<<j))num[i]++;
FFC(j,,N-){
if(((i>>)&j)||((j>>)&i))f1[i][j]=;
if(((i>>)&j)||((j>>)&i))f2[i][j]=;
}
}
}
int fuck(){
memset(dp,,sizeof(dp));
cur=,ans=,dp[][][][]=;
FFC(i,,){
FFC(j,,n)FFC(p,,N-)FFC(q,,N-){
if (dp[cur][j][p][q]==)continue;
FFC(z,,N-)
if (((z&g[i+])!=z)||num[z]+j>n||(i>=&&f1[q][z])||(i>=&&f2[p][z]))continue;
else dp[cur^][num[z]+j][q][z]+=dp[cur][j][p][q];
}
memset(dp[cur],,sizeof(dp[cur])),cur^=;
}
FFC(i,,N-)FFC(j,,N-)ans+=dp[cur][n][i][j];
return ans;
} int main() {
init();char str[N];
scanf("%d",&T);
while (T--){
scanf("%d",&n);
memset(g,,sizeof(g));
FFC(i,,){
scanf("%s",str);
FFC(j,,){
g[i]<<=;
if(str[j]=='.')g[i]|=;
}
}
printf("%d\n",fuck());
}
return ;
}

最新文章

  1. Javascript,颜色渐变效果的处理
  2. android开发中的问题总结(一)
  3. WPF自动隐藏的消息框(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。
  4. Button 设置适应不同版本 旋转以后大小相应的改变
  5. ARC————自动引用计数
  6. datawindow.net 动态按条件汇总字段值
  7. php中封装的curl函数(抓取数据)
  8. Xcode中 xx duplicate symbols for architecture i386错误提示
  9. C++Primer第5版学习笔记(三)
  10. android下隐藏标题栏
  11. java实现二维码
  12. css 10 款非常棒的CSS代码格式化工具推荐
  13. eclipse快速定位java对应的class
  14. iterable
  15. 【EntityFramework 6.1.3】个人理解与问题记录(2)
  16. Python2.7和3.5双版本共存和pip的使用
  17. OpenCL中三种内存创建image的效率对比
  18. BZOJ 3864
  19. CSS常见兼容问题以及解决办法
  20. 老司机浅谈linux系统学习技巧

热门文章

  1. Redis6-sorted set 的介绍
  2. 常用的js事件
  3. 人人公益模式系统开发app
  4. 关于reportng生成的测试报告不按测试执行顺序的解决办法
  5. XAMPP 的MYSQL无法启动
  6. Android中的eventBus传值
  7. 成都IT公司面经及公司评价
  8. JavaBean 反射机制实现自动配置数据
  9. 大数据时代之hadoop(一):hadoop安装
  10. 登录SQL注入