poj 1664 放苹果 (递推)

来源:互联网 发布:防晒面料 知乎 编辑:程序博客网 时间:2024/06/05 12:46

放苹果
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 33295 Accepted: 20648

Description

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

Input

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

Output

对输入的每组数据M和N,用一行输出相应的K。

Sample Input

17 3

Sample Output

8


code

/**先打表枚举,当n==0||m==0||n==1||m==1时 只有一种放法f[i][j] 表示i个苹果放入j个盘子中最多的放法当m<n时  f[m][n]=f[m][m]    最多有m个盘子能够全放当m>=n时  f[m][n]=f[m][n]+f[m-n][n]**/#include <iostream>#include<cstdio>#include<cstring>using namespace std;int main(){    int t,m,n;    int f[20][20];    for(int i=0;i<=20;i++)    {        f[i][1]=f[1][i]=1;        f[i][0]=f[0][i]=1;    }    for(int i=2;i<=10;i++)    {        for(int j=2;j<=10;j++)        {            if(i<j)                f[i][j]=f[i][i];            else                f[i][j]=f[i][j-1]+f[i-j][j];        }    }    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&m,&n);        printf("%d\n",f[m][n]);    }    return 0;}


0 0
原创粉丝点击