사과를 넣다
사과 문제 풀이 분석
이것도 Recursion tree입니다. 귀속 함수로 해답을 구하려고 했지만 세부 사항이 맞지 않습니다.
역귀함수 사고방식은 다음과 같다.
f(m, n)는 m개의 사과, n개의 접시를 놓을 때의 방법을 나타내는데 다음과 같은 두 가지 상황이 있다.
1.m
그래서 전체적으로 f(m, n)= f(m-n, n)+f(m, n-1).
귀속 출구:
1.n==1.모든 과일은 이 접시에 넣어야 한다. 단지 한 가지 넣는 방법이 있다. f(x,1)=1.
2.m==0.과일이 없으면 놓을 수 있는 방법은 오직 한 가지뿐이다. 그것은 접시가 모두 비어 있다는 것이다. f(0,x) = 1.
여기 주의하세요. 왜 m=1을 사용하지 않습니까?과일 하나만 남았는데 넣는 방법도 하나밖에 없잖아.단, 예를 들어 f(3,3) = f(3,2) + f(0,3), 이때 m는 0이고 출구 m==1에서 수렴되지 않아 데이터를 찾을 수 없습니다.
종합적으로 귀속 수출은 (n==1) ||(m==0)입니다. 물론 (n=1) ||(m==0) |(m==1)도 가능합니다.
*/
#include <stdio.h>
#include <stdlib.h>
int func(int m, int n)
{
if (m==0 || n==1) return 1;
if (m<n) return func(m,m);
else return (func(m-n, n) + func(m, n-1));
}
int main()
{
int i, t, m, n;
int a[20];
scanf("%d", &t);
for (i=0; i<t; ++i)
{
scanf("%d", &m);
scanf("%d", &n);
a[i] = func(m, n);
}
for (i=0; i<t; ++i)
{
printf("%d
", a[i]);
}
//system("pause");
return 0;
}
제목 첨부, poj1664:
4: 사과 넣기
보기제출 통계질문총 시간 제한:
1000ms
메모리 제한:
65536kB
묘사
같은 사과 M개를 N개의 같은 접시에 넣으면 어떤 접시가 비어 있어도 놓지 않을 수 있다. 모두 몇 가지 다른 분법이 있느냐고 물었다.(K로 표시) 5, 1, 1과 1, 5, 1은 같은 분법이다.
입력
첫 번째 줄은 테스트 데이터의 수 t(0<=t<=20)이다.다음 행에는 공백으로 구분되는 두 개의 정수 M과 N이 있습니다.1<=M,N<=10.
출력
입력한 각 데이터 M 및 N의 경우 해당 K를 한 줄로 내보냅니다.
샘플 입력
1
7 3
샘플 출력
8
출처
lwx@POJ
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 백엔드에서 데이터를 트리로 변환하고 맵은 json 트리를 생성하여 백엔드로 되돌려줍니다. (백엔드 변환)java 백엔드, 데이터를 트리로 변환하고,map는 json 트리를 생성하여 전방으로 되돌려줍니다(백엔드 변환) 1. 왜 이런 블로그를 쓰나요? 2.java 백엔드 코드 3. 전환된 데이터는 다음과 유사한 형식으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.