1. 程式人生 > >POJ1664 放蘋果

POJ1664 放蘋果

turn printf 放盤子 ret 放蘋果 name 邊界 poj can

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int T,n,m;
int solve(int m,int n){//m個蘋果 n個盤子 
    if(m<=1||n<=1) return 1;//邊界條件 
    if(m<n) return solve(m,m);//蘋果比盤子少 等價於把m個蘋果放入m個盤子的方案數 
    else return solve(m,n-1)+solve(m-n,n);
    /*否則 等於有一個盤子空著不放的方案(有空盤) + 
    把所有盤子都鋪上一層蘋果後用剩下的蘋果放盤子的方案(沒有空盤)*/
}
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&m,&n);
        printf("%d\n",solve(m,n));
    }
    return 0;
}

POJ1664 放蘋果