在一个 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的更多相关文章

  1. poj1778 All Discs Considered

    思路: 拓扑排序.贪心. 实现: #include <bits/stdc++.h> using namespace std; vector<]; int n1, n2; inline ...

随机推荐

  1. 流量分析系统---kafka集群部署

    1.集群部署的基本流程 Storm上游数据源之Kakfa 下载安装包.解压安装包.修改配置文件.分发安装包.启动集群 2.基础环境准备 安装前的准备工作(zk集群已经部署完毕)  关闭防火墙 chk ...

  2. Yii2.0数据库查询实例(三)

    常用查询: // WHERE admin_id >= 10 LIMIT 0,10 User::find()->])->offset()->limit()->all() / ...

  3. Loadrunder之脚本篇——参数化同行取值

    select next row 记录选择方式 Same line as,这个选项只有当参数多余一个时才会出现,其作用是根据某一个参数的行号取同一行. 例中的做法如下: 将多个参数存放在一个参数文件中: ...

  4. PPA(Personal Package Archives)简介、兴起、使用

    1.简介 PPA是Personal Package Archives,个人软件包文档,是默认情况下并未被包含在Ubuntu中的软件的一个集合.通常这些存储库的侧重点是单个的程序,不过他们也可以包含更多 ...

  5. 主攻ASP.NET.4.5.1 MVC5.0之重生:系统角色与权限(一)

    数据结构 权限分配 1.在项目中新建文件夹Helpers 2.在HR.Helpers文件夹下添加EnumMoudle.Cs namespace HR.Helpers { public enum Enu ...

  6. ==、equals与hashCode

    ==  首先,得说明java数据类型分为基本数据类型和引用数据类型, 基本数据类型有8种: 浮点型:float(4 byte), double(8 byte) 整型:byte(1 byte), sho ...

  7. .NET自带泛型委托方法Func、Action和Predicate

    Func.Action和Predicate是.NET自带的3个泛型委托方法,三个方法的区别其实并不大,要强行给混着用也是可以的,但是我们是有追求的人,把道理讲清楚总是好的. 一.Func是有返回值的方 ...

  8. Pandas基础用法-数据处理【全】-转

    完整资料:[数据挖掘入门介绍] (https://github.com/YouChouNoBB/data-mining-introduction) # coding=utf-8 # @author: ...

  9. zookeeper分布式锁的问题

    分布式锁的流程: 在zookeeper指定节点(locks)下创建临时顺序节点node_n 获取locks下所有子节点children 对子节点按节点自增序号从小到大排序 判断本节点是不是第一个子节点 ...

  10. CentOS 7(64位) 下Docker的安装

    系统要求是64位,内核版本至少3.10. 首先添加yum软件源: 之后更新yum软件源缓存,并安装docker-engine 查看docker 版本: Cannot connect to the Do ...