放苹果-DP

小蒜想知道把 MM 个同样的苹果放在 NN 个同样的盘子里,允许有的盘子空着不放,共有多少种不同的分法?(用 KK 表示)55,11,11 和 11,55,11 是同一种分法。

输入格式

第一行是测试数据的数目 t(0 \le t \le 20)t(0t20)。

以下每行均包含两个整数 MM 和 NN,以空格分开。1 \le M, N \le 101M,N10。

输出格式

对输入的每组数据 MM 和 NN,用一行输出相应的 KK。

 

代码段

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<cstring>
#include<set>
#include<cmath>
typedef long long ll;
using namespace std;
ll meme[12][12];
int main()
{
for(int i=1;i<=10;i++)
meme[1][i]=1;
for(int i=1;i<=10;i++)
meme[i][1]=1;
for(int i=1;i<=10;i++)
meme[0][i]=1;
for(int i=1;i<=10;i++)
meme[i][0]=1;
meme[0][0]=1;
for(int i=2;i<=10;i++)
for(int j=2;j<=10;j++)
{
if(j>i)
meme[i][j]=meme[i][j-1];
else
meme[i][j]=meme[i-j][j]+meme[i][j-1];
}

int sum;cin>>sum;
while(sum--)
{
int x,y;
cin>>x>>y;
cout<<meme[x][y]<<endl;
}
return 0;
}

当盘子数量比苹果多的时候(i>j),meme[i][j]这个状态的值等于i这个果子数与盘子数数量相等时值

而当盘子数量小于苹果时,加上meme[i][j-1](有一个空盘子不选)于meme[i-j][j](多余的果子再j个盘子下的状态)

 

posted on 2022-03-24 19:34  zesure  阅读(112)  评论(0编辑  收藏  举报

导航