HDU 4529
好题。果然好题,经典了。
列一个计划,清明前做好状压DP。之后就刷剩下的MULTI。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int Status=(1<<8); int dp[2][11][Status][Status]; //滚动数组实现。dp[i][j][k][l],其中表示当前状态i(权且认为是i行),推出下一个状态next,i状态以前总共使用了
//j个骑士,ki-1行放骑士的状态,l是i行的状态,这时的放置方法数。答案DP就行。
bool crashpt[Status][Status]; //当前行状态与上两行的状态是否有不相容
bool crashpo[Status][Status]; //当前行(要推出的行)与上一行状是否有冲突
int total[Status]; //每种状态会用了多少个骑士。
int G[10],n; //G[i]表示第i行可放骑士的位置的情况,压 缩。
char str[10]; void predo(){
memset(crashpt,false,sizeof(crashpt));
memset(crashpo,false,sizeof(crashpo));
memset(total,0,sizeof(total));
for(int i=0;i<Status;i++){
for(int j=0;j<8;j++){
if(i&(1<<j)) total[i]++;
}
for(int j=0;j<Status;j++){
if((j&(i>>2))||(i&(j>>2))) crashpo[i][j]=true;
if((j&(i>>1))||(i&(j>>1))) crashpt[i][j]=true;
}
}
} void slove(){
int cur=0,next=1;
memset(dp[0],0,sizeof(dp[0]));
dp[cur][0][0][0]=1;
for(int i=0;i<8;i++){
for(int j=0;j<=n;j++){
for(int t=0;t<Status;t++){
for(int o=0;o<Status;o++){
if(!dp[cur][j][t][o]) continue;
for(int now=0;now<Status;now++){
if(j+total[now]>n) continue;
if((now&G[i+1])!=now) continue;
if(crashpt[now][t]||crashpo[now][o]) continue;
dp[next][j+total[now]][o][now]+=dp[cur][j][t][o];
}
}
}
}
memset(dp[cur],0,sizeof(dp[cur]));
swap(cur,next);
}
int ans=0;
for(int i=0;i<Status;i++){
for(int j=0;j<Status;j++)
ans+=dp[cur][n][i][j];
}
printf("%d\n",ans);
} int main(){
int T;
scanf("%d",&T);
predo();
while(T--){
scanf("%d",&n);
memset(G,0,sizeof(G));
for(int i=1;i<=8;i++){
scanf("%s",str);
for(int j=0;j<8;j++){
G[i]<<=1;
if(str[j]=='.') G[i]|=1;
}
}
slove();
}
return 0;
}
HDU 4529的更多相关文章
- HDU 4529 郑厂长系列故事——N骑士问题 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4529 郑厂长系列故事--N骑士问题 Time Limit: 6000/3000 MS (Java/O ...
- hdu 4529 Double Dealing (置换群)
# include <stdio.h> # include <algorithm> # include <string.h> using namespace std ...
- HDU 4529 状压dp
郑厂长系列故事——N骑士问题 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- 【转载】ACM总结——dp专辑
感谢博主—— http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 动态规划一 ...
- 【DP专辑】ACM动态规划总结
转载请注明出处,谢谢. http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 ...
- dp专题训练
****************************************************************************************** 动态规划 专题训练 ...
- 【DP专辑】ACM动态规划总结(转)
http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...
- dp有哪些种类
dp有哪些种类 一.总结 一句话总结: 二.dp动态规划分类详解 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. * ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
随机推荐
- assistant: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by
[oracle@oracledb button]$ assistantassistant: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' no ...
- 《Typecript 入门教程》 2、访问控制符:public、private、protected、readonly
声明类的属性和方法时可以设置使用访问控制符,访问控制符设置类的属性和方法能不能在类的外部被访问 1. 默认为 public,使用public定义的属性和方法在类的内部和外部都可以访问 2. priva ...
- flask 中的模板语法 jinja2及render_template的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- 解决gradle project refresh failed: protocol family unavailable问题的几种方法
Android Studio从版本1.5更新到2.1之后,打开Android Studio一直提示: gradle project refresh failed: protocol family un ...
- 关于linux下的.a文件与 .so 文件
连续几天终于将一个又一个问题解决了,这里说其中一个问题 描述问题:使用多线程pthread的时候,(我用的IDE,CODEBOLCKS)编译后发现直接弹出窗口,程序还没有被Build..巴拉巴拉,然后 ...
- [转]mysql触发器的作用及语法
转自:http://blog.csdn.net/cloudday/article/details/6905590 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本 ...
- P1968 美元汇率
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作
SAS学习笔记之<SAS编程与数据挖掘商业案例>(2)数据获取与数据集操作 1. SET/SET效率高,建立的主表和建表索引的查询表一般不排序, 2. BY语句,DATA步中,BY语句规定 ...
- JSP中如何利用JS实现登录页面的跳转(JSP中如何利用JS实现跳转页面)
<%! <% url = word = } ...
- 在CentOS下搭建Android 开发环境
在CentOS下搭建Android 开发环境 目录 1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.ADT安装 1.4.Android SDK安装 1.5.Android NDK ...