1267 苹果

 

描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?M, N为自然数。说明:5, 1, 1和1, 5, 1 是同一种分法。

输入

第一行一个整数表示数据的组数(多组数据),对于每组数据第一行是苹果个数M (1 ≤ m ≤ 100) ,第二行是盘子个数N(1 ≤ n ≤ 100)。

输出

每组数据输出一行,放苹果的方法个数。

样例输入

1
3
2

样例输出

2

解题思路:
该题是一道动态规划题。
a[i][j]表示将i个苹果放入j个盘子中的方法个数
a[j][k]=a[j-k][k]+a[j][k-1];表示k个盘子中要么至少有一个苹果,要么这些苹果放入k-1个盘子中。实现了动态规划的思想
#include <iostream>
using namespace std;

int a[101][101];
int main()
{
    int t;
    cin>>t;
    for (int i=0;i<t;i++)
    {
        int n,m;
        cin>>n>>m;
        if (n<m)
           m=n;
        int j,k;
        for (j=0;j<=m;j++)
            a[0][j]=1;
        for (j=1;j<=n;j++)
            a[j][1]=1;
        for (j=0;j<=n;j++)
            a[j][0]=0;
        for (j=1;j<=n;j++)
            for (k=2;k<=m;k++)
            {
               if (j<k)
               a[j][k]=a[0][j]+a[j][j-1];
               else
               a[j][k]=a[j-k][k]+a[j][k-1];
            }
        cout<<a[n][m]<<endl;
    }
    return 0;
}

你可能感兴趣的:(1267 苹果)