您的位置:首页 > 运维架构

openjudge放苹果

2015-12-16 20:14 295 查看

666:放苹果

查看
提交
统计
提问

总时间限制: 1000ms 内存限制: 65536kB

描述把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


来源lwx@POJ#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int k,n,m,i,j,f[20][20];

int main()

{

scanf("%d",&k);

for (int l=1;l<=k;l++)

{

scanf("%d%d",&n,&m);

memset(f,0,sizeof(f));

f[1][1]=1;

for (i=1;i<=n;i++)

for (j=1;j<=m;j++)

if (i!=1||j!=1)

{

f[i][j]=f[i-1][j-1];

if (i-j>=0)

f[i][j]+=f[i-j][j];

}

int ans=0;

for (i=1;i<=m;i++)

ans+=f
[i];

cout<<ans<<endl;

}

}//非常典型的数的划分问题,f
[m]表示把n个苹果分成m分的方案数,分为两种情况。第一种是每份中的苹果数都大于1,即不存在一个盘中有一个;和存在一个盘中有一个。因为允许有空盘子,所以最后求和输出即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: