알고리즘은 게임을 통과하는 열차
시간 제한 : 메모리 제한을 1.0s : 256.0MB를
[문제 설명]
체육 수업을 교사 샤오 남자는 종종 함께 게임을하는 학생들을했다 때. 이 시간, 교사는 학생들이 함께 게임을 통과으로한다.
n은 원 서 동급생이 교사가 자정에 공을 시작 휘슬을 불면 공을 들고 학생 중 하나가, 각 학생에서 자신의 두 학생의 주위에 공을 전달할 수 있습니다 : 게임의 규칙이있다 A (오른쪽 또는 왼쪽), 자정 교사는 당신에게 성능을 제공하기 위해, 패자는 학생들에게 확산되지 않은 공을 들고 휘파람 다시 전달 중지,이 시간을 날려 버릴 수 있습니다.
샤오 남자의 손이 볼을 통과 m 시간 이후, 샤오 남자의 손에 돌려 통과하기 시작에서 다른 방법 패스를 만들기 위해 얼마나 많은 : 스마트 샤오 남자는 흥미로운 질문을 제기했다. 단지 두 방법하는 경우, 조성물의 순서에있어서의 볼 캐치 수용 학생의 시퀀스가 다른 경우 두 가지 방법은 다른 방법을 전달하는 것으로 간주된다. 예를 들어 세 학생은 제 1, 제 2, 제 3 및 제 1있다 작은 매우 손으로 1-> 2-> 3-> 1, 1-> 3 위로 세 번 샤오 사람의 볼을 가정 -> 2-> 1 개의 종류의 총.
입력 형식
공통 라인, 2 개 공간은 정수 N, m에 의해 분리되어있다 (3 <= N <= 30.1 <= m <= 30).
출력 형식
총 라인 t는, 질문의 의미에 부합하는 방법의 수를 나타내는 정수가있다.
입력 샘플
33
샘플 출력
2
상기의 데이터 사이즈 합의
40 %의 데이터를 만족 :. 3 <= N - <= 30.1 <= m <= 20
데이터 만족 100 % : 3 <= N <= 30.1 <= m <= 30
분석 : 세트가 통과하는 학생들에게 다음 번 재발 관계에 대한 가능한 방법의 수의 끝 지점으로
초기 조건은 다음과 같습니다 :
#include <stdio.h>
int main()
{
int n, m;
int f[35][35] = { 0 };
scanf("%d %d", &n, &m);
f[1][2] = f[1][n] = 1;
for (int i = 2; i <= m; ++i)
{
f[i][1] = f[i-1][n] + f[i-1][2];
for (int j = 2; j < n; ++j)
f[i][j] = f[i-1][j-1] + f[i-1][j+1];
f[i][n] = f[i-1][n-1] + f[i-1][1];
}
printf("%d", f[m][1]);
return 0;
}