-
总时间限制:
1000ms
-
内存限制:
65536kB
-
描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
-
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
-
输出
对输入的每组数据M和N,用一行输出相应的K。
-
样例输入
17 3
-
样例输出
8
-
来源
lwx@POJ
#include <iostream> using namespace std; int sum ( int m, int n ){ //这表示m个苹果放在n个篮子的方法数目 //可以想见,大概有两种方法吧 //一种是所有盘子先放一个,另一种是有一个盘子空着 //注意m和n的大小关系 if ( m < 0 ) return 0; if ( n == 1 || m == 0 ){ return 1; } if ( m < n ){ return sum( m, n - 1); } //这边可以优化 return ( m , m); if ( m >= n){ return sum ( m - n , n ) + sum ( m, n - 1); } } int main(){ int n; cin >> n; while ( n -- ){ int a,b; cin >> a >> b; cout << sum(a,b); cout << endl; } return 0; }