Jump Game II

1152 단어 game
이 문 제 는 비교적 쉽게 생각 할 수 있 는 사고 방향 은 동태 계획 이다. 예전 부터 분석 한 결과 한 노드 가 뒤의 여러 노드 에 도착 할 때마다 어느 것 을 선택 할 수 있 는 지 모 르 고 다시 돌아 갈 수 밖 에 없다. 그러면 중복 되 는 서브 문 제 를 많이 초래 할 수 있 기 때문에 거꾸로 옮 겨 다 닐 수 있다 는 것 을 알 게 되 었 다.이렇게 매번 한 노드 가 도착 할 수 있 는 전방 의 결점 에서 목적지 까지 의 거 리 는 모두 확정 되 기 때문에 풀 수 있다.그러나 많은 동적 계획 알고리즘 과 마찬가지 로 이 알고리즘 은 시간 복잡 도 는 n ^ 2 로 큰 배열 에 대해 곧 시간 을 초과 합 니 다.
이 문제 의 비교적 좋 은 사고방식 은 바로 욕심 산법 이다.
이 명 사 는 조금씩 나 오 면 일반적인 욕심 산법 의 사고 에 따라 사용 할 수 있다. 물론 가장 중요 한 것 은 이곳 에 가장 좋 은 서브 구조 가 있다 는 것 을 증명 하 는 것 이다.우 리 는 여전히 거꾸로 돌아 다 니 는 것 을 발견 할 수 있다.예 를 들 어 마지막 점 부터 마지막 점 에 도착 할 수 있 는 점 이 많 습 니 다. 우 리 는 이런 점 에서 가장 왼쪽 에 있 는 점 이 가장 좋 은 것 이 라 고 생각 합 니 다.
왜 일 까요?예 를 들 어 A B G H Y 다섯 개의 점 (왼쪽 에서 오른쪽으로 배열) 이 모두 목적지 에 도착 할 수 있다 면 A 점 은 반드시 가장 좋 은 경로 에 있어 야 한다.앞의 점 이 G. H. Y 와 같은 것 에 도달 할 수 있다 면 A 점 에 도달 할 수 있 을 것 이 고 그렇지 않 으 면 반드시 도착 할 수 있 는 것 은 아니 기 때문이다.
int jump(int A[], int n){

	if (n == 0)

		return 0;

	int index = n - 1;

	int step = 0;

	while (1){

		step++;

		int k = index;

		for (int i = k - 1; i >= 0; i--) {

			if (i + A[i] >= k)

				index = i;

		}

		if (index == 0)

			break;

	}

	return step;

}


좋은 웹페이지 즐겨찾기