HDU 4529
2024-10-01 02:31:40
好题。果然好题,经典了。
列一个计划,清明前做好状压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;
}
最新文章
- Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q73-Q76)
- java7-4 继承的练习
- iOS - Swift NSNull		空值
- [笔记] MySql Workbench 导出表结构和数据报错 mysqldump: [ERROR] unknown variable &#39;delayed-insert=FALSE&#39;
- Spring通过AOP实现对Redis的缓存同步
- Spark中的wordCount程序实现
- idea找不到package下的mapper.xml文件
- 转 fiddler常见的应用场景
- 区间DP初探 P1880 [NOI1995]石子合并
- 【MySQL】MySQL的常规操作
- 【Postgres】PostgreSQL配置远程连接
- 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!
- flask 中 session的源码解析
- 使用鼠标监听器,使鼠标悬停在JTable某行时背景色改变
- JavaScript技巧45招(转)
- c# 后台线程 访问前台控件并显示信息
- JAVA的文件操作【转】
- Map根据value排序
- CV2图像操作