社区讨论

怎么优化?

P1135奇怪的电梯参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lranqccx
此快照首次捕获于
2024/01/12 21:11
2 年前
此快照最后确认于
2024/01/13 08:55
2 年前
查看原帖
代码:
CPP
#include<bits/stdc++.h>
using namespace std;

int n, a, b;
int k[201], d[201], f[201];
bool c[201];
int ma = 2147483647;

inline void dfs(int p, int ans) {
	if (p == b) {
		ma = min(ma, ans);
		return;
	}
	if (!k[p])
		return;
	if (ans > INT_MAX)
		return;
	if (p - k[p] >= 1 && !c[p - k[p]]) {
		c[p] = true;
		dfs(p - k[p], ans + 1);
		c[p] = false;
	}
	if (p + k[p] <= n && !c[p + k[p]]) {
		c[p] = true;
		dfs(p + k[p], ans + 1);
		c[p] = false;
	}
}

int main() {
	scanf("%d%d%d", &n, &a, &b);
	for (int i = 1; i <= n; i++)
		scanf("%d", &k[i]);
	dfs(a, 0);
	if (ma == 2147483647)
		printf("-1");
	else
		printf("%d", ma);
}

回复

2 条回复,欢迎继续交流。

正在加载回复...