64分求调 AC/WA 无TLE/MLE
查看原帖
64分求调 AC/WA 无TLE/MLE
1506398
Sakurapainting楼主2024/10/27 16:23
#include <bits/stdc++.h>
using namespace std;
int n, a, b;
int k[210];
bool vis[210];
long long ans = 1e9;
long long sum = 0;
bool stfd = false;

void dfs(int x){
	if(x == b){
		stfd = true;
		ans = min(sum, ans);
		return;
	}
	
	for(int i = 1; i <= 2; i++){
		switch(i){
			case 1:	//up
				if(x + k[x] > n)	break;
				else{
					if(!vis[x + k[x]]){
						sum++;
						vis[x + k[x]] = 1;
						dfs(x + k[x]);
						sum--;
						vis[x + k[x]] = 0;
					}
					break;
				}
			case 2: //down
				if(x - k[x] < 1)	break;
				else{
					if(!vis[x - k[x]]){
						sum++;
						vis[x - k[x]] = 1;
						dfs(x - k[x]);
						sum--;
						vis[x - k[x]] = 1;
					}
					break;
				}
		}
	}
	if(x == a && !stfd){
		printf("-1");
		exit(0);
	}
	else	return;
}

int main(){
	cin >> n >> a >> b;
	for(int i = 1; i <= n; i++){
		cin >> k[i];
	}
	dfs(a);
	printf("%d", ans);
	return 0;
}
2024/10/27 16:23
加载中...