poj1778
在一个 8*8 的棋盘里有一个国王和一些骑士,我们要把他们送到同一顶点上去。 国王能
够选择一名骑士作为坐骑,而与骑士一起行动(相当于一个骑士),同一位置, 同一时刻可
以有多个骑士。问最少走的步数。 骑士的行动方式如下图所示。

输入格式:
仅有一行,包含一个字母和数字间隔的字符串,先字母再数字,字母仅可能是大写的 A
到 H,数字只可能是 1 到 8,描述国王和骑士的坐标位置,第一个是国王的坐标,后面都是
骑士的坐标,显然字母是列号,数字是行号。
输出格式:
仅有一个数,表示题目要求的最少步数。
样例输入: D4A3A8H1H8
样例输出: 10
数据范围:字符串的长度不会超过 128。
爆搜
枚举64个相遇点
再枚举64个国王JBSM的点
#include<iostream>
#include<cstring>
#include<cmath>
#define MN 64
#define MV 100000
#define min(a,b) a<=b?a:b
#define max(a,b) a>=b?a:b
using namespace std;
int dir[][]={{-,-},{-,-},{-,},{-,},{,-},{,-},{,},{,}};
int f[][MN+][MN+],kn[MN+][],n=,t[MN+];
bool lim(int x, int y)
{
return x>= && x< && y>= && y<;
}
void csh()
{
int i,j,k,t1,t2,p1,p2;
for (i=;i<MN;i++) for (j=;j<MN;j++)
{
if (i==j) f[][i][j]=f[][i][j]=;
else f[][i][j]=f[][i][j]=MV;
}
for (i=;i<;i++) for (j=;j<;j++) for (k=;k<;k++)
{
t1=i+dir[k][];t2=j+dir[k][];
if (lim(t1,t2))
{
p1=i*+j;p2=t1*+t2;
f[][p1][p2]=f[][p1][p2]=;
}
}
}
void floyd()
{
int i,j,k;
for (k=;k<MN;k++) for (i=;i<MN;i++) for (j=;j<MN;j++)
{
f[][i][j]=min(f[][i][k]+f[][k][j],f[][i][j]);
f[][i][j]=min(f[][i][k]+f[][k][j],f[][i][j]);
}
}
int main()
{
int i,j,k,D,d1,d2,x,y,ans,king,s;
char C[];csh();floyd();
while (scanf("%s",C)!=EOF)
{
n=(strlen(C)-)/;ans=MV;
if (n==) {cout<<;continue;}
king=(C[]-'A')+(C[]-'')*;
for (i=,j=;i<n;i++,j+=) t[i]=(C[j]-'A')+(C[j+]-'')*;
for (i=;i<MN;i++)
{
s=;
for (k=;k<n;k++) s+=f[][t[k]][i];
for (j=;j<MN;j++)
{
d1=f[][king][j];d2=MV;
for (k=;k<n;k++) d2=min(d2,f[][t[k]][j]+f[][j][i]-f[][t[k]][i]);
ans=min(ans,s+d1+d2);
}
}
cout<<ans<<endl;
}
//system("pause");
}
poj1778的更多相关文章
- poj1778 All Discs Considered
思路: 拓扑排序.贪心. 实现: #include <bits/stdc++.h> using namespace std; vector<]; int n1, n2; inline ...
随机推荐
- vue 数据传递的方法
组件(Component)是 Vue.js 最强大的功能.组件可以封装可重用的代码,通过传入对象的不同,实现组件的复用,但组件传值就成为一个需要解决的问题. 1.父组件向子组件传值 组件实例的作用域是 ...
- mybatis collection 一对多关联查询,单边分页的问题总结!
若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候 ...
- awk的输出格式控制:print 和printf
1.两个函数和若干个内部变量控制awk的输出格式: 两个函数:print和printf 内部变量:OFS:输出的列间隔符,默认为tab; ORS:输出的行间隔符,默认为\n printf更加自由化, ...
- indy10 UDP实例
UDP就比较简单了,放个按钮,一个TIdUDPServerTIdUDPServer绑定 0.0.0.0:3820,然后Active设置为True //发送按钮procedure TForm1.Butt ...
- async/await方法解析
欲了解await,必须先了解Promise,可参考: http://www.cnblogs.com/yanze/p/6347646.html 支持度: ES6已支持Promise,ES7也决定支持aw ...
- unbunto关闭触摸屏
sudo rmmod psmouse 这个是禁用的 sudo modprobe psmouse 这个是启用的
- 使用kibana进行简单的CRUD和版本控制
使用: ##创建文档之前先创建索引 PUT /toov5 ##查询索引 GET /toov5 ##创建文档 /索引/类型/id PUT /toov5/user/1 { "name" ...
- JAVA学习前十天:小结、面向对象之”扑克牌“例子
2016年4月26号正式步入JAVA学习课堂,学习了第一节JAVA课程,由于以前有C语言基础,所以课程有点快! 第一天:学习了教材的第一部分,第一部分总共两章,分别是JAVA简介和JAVA基础语法. ...
- asp.net中异步调用webservice
WebService方法是不需要作任何修改的,只是在调用时采用异步的方式,这样在循环中,速度会显得快一点. 原来的方式: HotelMagWeb.com.china_sms.www.MainServi ...
- c、rust、golang、swift性能比较
mac 计算速度视觉判断是(由好到差):c > rust > swift > golang 内存开销在mac上是(由好到差):c > rust > golang > ...