// 1160_放蘋果.cpp : 定義控制臺應用程序的入口點。//題目1160:放蘋果//時間限制:1 秒內存限制:32 兆特殊判題:否提交:1163解決:788//題目描述://把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//來源://2011年北京大學計算機研究生機試真題#include "stdafx.h"#include "stdio.h"#include "algorithm"#include "iostream"#include "string.h"using namespace std;int func(int m,int n){ if(m<0) return 0; if(!m || n==1) return 1; else return func(m,n-1) + func(m-n,n); }int main(){ int t,m,n; cin>>t; while(t--){ cin>>m>>n; cout<<func(m,n)<<endl; } return 0;}/*基本思路(轉):令(m,n)表示m個蘋果放到n個籃子里的種數,那么勢必會有籃子空余、籃子都放兩種情況。1、假如有一個籃子空余,那么空余籃子相當于沒用,那么(m,n)的問題就是把m個蘋果放到n-1個籃子里的種數(m,n-1)2、假如沒有籃子空余,那么每個籃子至少應該有一個蘋果,即剩下了m-n個蘋果了,問題就變成了,把m-n個蘋果放到n個籃子里的問題了(m-n,n)。所以:(m,n)=(m,n-1)+ (m-n,n);*/