동적 계획 문제 (2) - 계단 뛰 어 내리 기
1. 제목 설명
한 계단 은 모두 n 계단 으로 한 번 에 1 계단 을 뛸 수도 있 고 2 계단 을 뛸 수도 있다.총 몇 개의 총 점프 법 이 있 는 지 를 구하 고 알고리즘 의 시간 복잡 도 를 분석한다.
2. 귀속 방식
이 동태 계획 문제 에 대해 우 리 는 똑 같이 두 단계 로 나 누 어 생각한다.
4. 567917. 만약 에 우리 가 1 급 을 뛰 었 다 면 나머지 점프 법 은 f (n - 1) 이다
4. 567917. 만약 에 우리 가 2 급 을 뛰 었 다 면 나머지 점프 방법 은 f (n - 2) 이다
이 럴 때 우 리 는 다시 실현 할 수 있다, 천천히!우 리 는 재 귀적 인 조건 에서 벗 어 나 야 한다. 이것 도 없어 서 는 안 된다!
이 문제 에 있어 서 재 귀 조건 은 n = 1, 2 일 때 우 리 는 1, 2 로 돌아 가 는 것 이다.
왜 하나, 둘 이 죠?n = 1 일 때 한 가지 점프 방법 만 있 기 때문이다.n = 2 시 에는 두 가지 점프 법 이 있다.그리고 초기 값 이 생 겼 습 니 다. 그리고 두 가지 상황 만 있 습 니 다. (1 급 을 뛰 거나 2 급 을 뛰 거나) 이것 이 바로 피 보 나치 수열 문제 입 니 다!
코드 는 다음 과 같 습 니 다:
#include<iostream>
using namespace std;
int findSolution(int N)
{
int result[3]={0, 1, 2}; //
if(N<=2)
return result[N];
return findSolution(N-1)+findSolution(N-2); //
}
int main()
{
int N=20;
int num=findSolution(N);
cout<<num<<endl;
return 0;
}
3. 비 귀속 방식
비 귀속 방식 도 반드시 파악 해 야 한다!
이것 이 피 보 나치 수열 문제 라면 비 귀속 방식 의 실현 도 비교적 쉽다 ~
다음 과 같다.
#include<iostream>
using namespace std;
int findSolution(int N)
{
int Fab[3]={1,1};
if(N<2)
return 1;
for(int i=2; i<=N; i++)
{
Fab[2]=Fab[0]+Fab[1]; //
Fab[0]=Fab[1];
Fab[1]=Fab[2];
}
return Fab[2];
}
int main()
{
int N=20;
int num=findSolution(N);
cout<<num<<endl;
return 0;
}
지적 해 야 할 것 은 이 문제 의 비 재 귀 방식 의 추산 규칙 이 비교적 비슷 하 다 는 것 이다. 그 당시 에 편 에서 보고 싶 지 않 았 기 때문에 여러분 들 은 앞으로 서로 다른 문제 의 추산 규칙 에 주의해 야 한다!
또한 3 단 계 를 뛰 어 넘 을 수 있다 면 실현 하 는 사고방식 은 같 습 니 다. 초기의 몇 개의 값 만 바 꾸 면 됩 니 다 ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조 학습 노트 1 - 링크 반전 (재 귀 와 비 재 귀)최근 에 데이터 구 조 를 배우 고 필 기 를 했 습 니 다. 생각 이 많 습 니 다. 다음 과 같 습 니 다. 재 귀적 사용 안 함: 재 귀적 사용: 소스 코드 는 링크 반전 - 데이터 구조 참조 박문 에서 유래 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.