BZOJ1085 luogu2324骑士精神题解
没有什么特别好的办法,只好用搜索去做
因为一次移动最多归位一个骑士
所以可以想到用IDA*,为了简化状态
我们用k,x,y,sum来表示移动了k步,空格在x,y,还用sum个没有归位的情况
然后枚举转移即可
标准的IDA*
# include<cstring>
# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstdio>
# include<algorithm>
using namespace std;
const int mn = ;
int b[mn][mn]={{},
{,,,,,},
{,,,,,},
{,,,-,,},
{,,,,,},
{,,,,,}};
int dx[]={-,-,-,,-,,,};
int dy[]={-,,, ,-,-,-,};
int a[mn][mn];
int t,sx,sy;
int ans=-;
int maxd;
bool check(int k,int x,int y,int sum,int la)
{
if(k+sum>maxd)
return false;
if(sum==)
return true;
bool flag=false;
int xx,yy,p,col;
for(int i=;i<=;i++)
{
if(i!=-la)
{
xx=x+dx[i];
yy=y+dy[i];
p=sum;
if(xx> && xx<= && yy> && yy<=)
{
if(a[xx][yy]==b[xx][yy] && a[xx][yy]!=b[x][y])
p++;
if(a[xx][yy]!=b[xx][yy] && a[xx][yy]==b[x][y])
p--;
if(b[xx][yy]==-)
p--;
if(b[x][y]==-)
p++;
col=a[xx][yy];
a[xx][yy]=-,a[x][y]=col;
flag=check(k+,xx,yy,p,i);
if(flag)
return true;
a[x][y]=-,a[xx][yy]=col;
}
}
}
return false;
}
void ida(int ret)
{
for(maxd=ret;maxd<=;maxd++)//注意此处要到16
{
if(check(,sx,sy,ret,-))
{
ans=maxd-;
return ;
}
}
}
int main()
{
int ret;
char ch;
scanf("%d",&t);
while(t--)
{
ans=-;
ret=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>ch;
if(ch=='*')
{
a[i][j]=-;
sx=i,sy=j;
}
else a[i][j]=ch-'';
if(a[i][j]!=b[i][j])
ret++;
}
ida(ret);
printf("%d\n",ans);
}
return ;
}
BZOJ1085 luogu2324骑士精神题解的更多相关文章
- BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
- BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 【日常学习】【IDA*】codevs2449 骑士精神题解
题目描写叙述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在不论什么时候一个骑士都能依照骑士的走法(它能够走到和它横坐标相差为1.纵坐标相差为2或 ...
- [BZOJ1085] [SCOI2005] 骑士精神 (A*)
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- [BZOJ1085][SCOI2005]骑士精神 搜索
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走 ...
- BZOJ1085: [SCOI2005]骑士精神
传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...
- BZOJ1085 [SCOI2005]骑士精神(IDA*)
IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...
- bzoj1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...
随机推荐
- [原创]Machine Learning/机器学习 文章合集
转载请注明出处:https://www.codelast.com/ ➤ 用人话解释机器学习中的Logistic Regression(逻辑回归) ➤ 如何防止softmax函数上溢出(overflow ...
- numpy库数组属性查看:类型、尺寸、形状、维度
import numpy as np q = np.array([1,2,3,4],dtype=np.complex128) print("数据类型",type(q)) ...
- TZ_14_Feign的客户端和Feign的负载均衡
1.作用:Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样.你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做. 2.导入起步坐标 < ...
- Hibernate4的注解 (持续更新范例中)
作用:使得Hibernate程序的开发大大的简化.利用注解后,可不用定义持久化类对应的*.hbm.xml,而直接以注解方式写入持久化类的实现中. 注解配置持久化类常用注解. 注解 含义和作用 @Ent ...
- C#基础之Async和Await 的异步编程
官方文档地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/ Coffee cup = ...
- CPU 和内存 $ free -m$ uptime$ top$ htop
注意以下问题: 还有空余的内存吗? 服务器是否正在内存和硬盘之间进行swap? 还有剩余的CPU吗? 服务器是几核的? 是否有某些CPU核负载过多了? 服务器最大的负载来自什么地方? 平均负载是多少?
- HR招聘_(二)_招聘方法论(招聘原因及原则)
1 招聘原因 离职 转岗 新增 工作量加大而无法负荷(若为短期工作量的加大可考虑外包或临时雇员) 业务发展需求(新产品线拓展,新事业部组建或组织架构变化等) 2 招聘原则 平等 面试官和候选人双方地位 ...
- Poj 1182种类(带权)并查集
题目链接 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44316 Accepted: 12934 Descriptio ...
- c#通过app.manifest使程序以管理员身份运行
通常我们使用c#编写的程序不会弹出这个提示,也就无法以管理员身分运行.微软的操作系统使用微软的产品方法当然是有的,通过app.manifest配置可以使程序打开的时候,弹出UAC提示需要得到允许才可以 ...
- Python运用于数据分析的简单教程
Python运用于数据分析的简单教程 这篇文章主要介绍了Python运用于数据分析的简单教程,主要介绍了如何运用Python来进行数据导入.变化.统计和假设检验等基本的数据分析,需要的朋友可以参考下 ...