用户输出
4
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#81732 | #1038. 1-04E. zzj & liaoy 想要去摄影 | Accepted | 100 | 91 ms | 14248 K | C++ / 2.2 K | C2024liuhongyi | 2023-02-17 20:51:40 |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 35, MAXM = 1e5 + 5;
char mp[MAXN][MAXN];
int n, m, dis[MAXN][MAXN][MAXN][MAXN];
int dx[5] = { 0, 1, 0, -1 }, dy[5] = { 1, 0, -1, 0 };
struct node {
int xx, yy;
node() {}
node(int xxx, int yyy) {
xx = xxx;
yy = yyy;
}
};
void bfs(int x, int y) {
queue<node> q;
q.push(node(x, y));
memset(dis[x][y], 0x3f, sizeof(dis[x][y]));
dis[x][y][x][y] = 0;
while (!q.empty()) {
int xx = q.front().xx, yy = q.front().yy;
q.pop();
for (int i = 0; i < 4; i++) {
int xxx = xx + dx[i], yyy = yy + dy[i];
if (xxx > n || yyy > m || xxx < 1 || yyy < 1 || mp[xxx][yyy] == '#')
continue;
if (dis[x][y][xxx][yyy] > dis[x][y][xx][yy] + 1) {
dis[x][y][xxx][yyy] = dis[x][y][xx][yy] + 1;
q.push(node(xxx, yyy));
}
}
}
}
int cnt, X[MAXN], Y[MAXN];
int dp[MAXM][MAXN];
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> mp[i][j];
if (mp[i][j] == 'p')
X[0] = i, Y[0] = j;
if (mp[i][j] == '@')
X[++cnt] = i, Y[cnt] = j;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (mp[i][j] == 'p' || mp[i][j] == '@')
bfs(i, j);
}
}
memset(dp, 0x3f, sizeof(dp));
dp[0][0] = 0;
for (int i = 0; i < cnt; i++) dp[1 << i][i + 1] = dis[X[0]][Y[0]][X[i + 1]][Y[i + 1]];
for (int i = 1; i < (1 << cnt); i++) {
for (int j = 0; j < cnt; j++) {
if (!(i & (1 << j)))
continue;
for (int k = 0; k < cnt; k++) {
int tmp = (1 << k);
if (i & tmp)
continue;
dp[i | tmp][k + 1] =
min(dp[i | tmp][k + 1], dp[i][j + 1] + dis[X[j + 1]][Y[j + 1]][X[k + 1]][Y[k + 1]]);
}
}
}
int ans = 0x3f3f3f3f;
for (int i = 1; i <= cnt; i++) ans = min(ans, dp[(1 << cnt) - 1][i]);
if (ans == 0x3f3f3f3f)
puts("-1");
else
printf("%lld", ans);
return 0;
}
10 10
#.########
####.###@#
##########
######.###
@.#.#p#@##
###..##.##
##.#####.#
#.####@#.#
###@##
<15 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0
10 10
.##.@.#.#.
###..##@#.
...#@#.###
.#.#..#...
#..#.....#
....##..##
..##..@.#p
##....##..
..#...
<15 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0
10 10
.#@......#
...#......
..#.....##
..#..#....
...##..@.@
...@#.#...
#.#..#..#.
.p......##
.#..#.
<15 bytes omitted>
用户输出
30
系统信息
Exited with return code 0
20 20
..##.......@........
..#...#....#..##....
...#.#...#..#.#..#..
..#...#..#@###..##..
..#.#....#
<325 bytes omitted>
用户输出
61
系统信息
Exited with return code 0
30 30
##..##.###........#...#...@##.
#.#..#...##.....#.#.#..##p.#.@
...#.##......#...#.#.....#..#@
#
<835 bytes omitted>
用户输出
12
系统信息
Exited with return code 0
30 30
.....#..#...#.@..#..##.#..#...
.#..##.....##..........#.....#
##...##...#.#.......p...#...#.
#
<835 bytes omitted>
用户输出
83
系统信息
Exited with return code 0
30 30
##.....#.......#.....##...#@..
.......#.##.##..#.#.####.##...
.##......#..#.#.......#.....#.
.
<835 bytes omitted>
用户输出
130
系统信息
Exited with return code 0
30 30
...#..###.....##.#....#...##..
#.#...#..#.#..#..#.######..##.
.##..#.@.#......##...#....#.#.
.
<835 bytes omitted>
用户输出
154
系统信息
Exited with return code 0
30 30
..#...#...#...#........#....##
#.##....##.@#.#.#.#.#..@......
#.....#..@....#..#..##.#..#..#
.
<835 bytes omitted>
用户输出
114
系统信息
Exited with return code 0
30 30
#.######.##.####.#######.#####
##.@####.######.#########.##.#
...######.########.########.##
#
<835 bytes omitted>
用户输出
-1
系统信息
Exited with return code 0