1206:放苹果 (递推)
总时间限制:
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
#include return 0;
int apple[105][105];//存放苹果与盘子的数组
int tmp[105];//暂时存的每种放法
using namespace std;
int main()
{
int i,j,k,m,n;
scanf("%d",&k);//输入组数
for(int t=0;t
memset(apple,0,sizeof(apple));
for(i=1;i<100;i++)//不一定是100,可是20就可
{
apple[i][1]=1;//一个苹果是一种放法
apple[1][i]=1;//一个盘子是一种放法
apple[0][i]=1;//没苹果是一种放法
}
for(i=2;i<=m;i++)//从2个苹果和2 个盘子 开始
for(j=2;j<=n;j++){
if(i
else//递推公式中的算法,用在递推中
apple[i][j]=apple[i][j-1]+apple[i-j][j];}//有盘子为空,和无盘子为空的放法的和
tmp[t]=apple[m][n];}//求出的值,放在 tmp中
for(i=0;i
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
