2678

每台机子我们最多使用1次,或者一次都不使用。最后算一下曼哈顿距离就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

#include <iostream>
#include <set>
#include <algorithm>
#include <string.h>
#include <queue>
#include <stack>
#define ll long long
using namespace std;
struct
{
ll x, y, lx, ly;
}node[4];
ll x, y, last_x, last_y;
bool vis[4];
ll ans=0x3f3f3f3f3f3f3f3f;
ll dist(ll u,ll v,ll mx,ll my)
{
return abs(u - mx) + abs(v - my);
}
void dfs(int k,ll u,ll v,ll time)
{
if(k==3)
{
ans = min(ans, time+dist(u, v, last_x, last_y));

return ;
}
dfs(k + 1, u, v, time);
for (int i = 1; i <= 3;i++)
{
if(!vis[i])
{
vis[i] = 1;
dfs(k + 1, node[i].x, node[i].y, time + 10 + dist(u, v, node[i].lx, node[i].ly));
dfs(k + 1, node[i].lx, node[i].ly, time + 10 + dist(u, v, node[i].x, node[i].y));
vis[i] = 0;
}
}
}
int main()
{
cin >> x >> y >> last_x >> last_y;
for (int i = 1; i <= 3;i++)
{
cin >> node[i].x >> node[i].y >> node[i].lx >> node[i].ly;
}
dfs(0,x,y,0);
cout << ans << endl;
}