AcWing 1050. DP模板:n个苹果m个盘子
原题链接
中等
作者:
W.W
,
2021-03-31 20:44:30
,
所有人可见
,
阅读 375
#include<bits/stdc++.h>
using namespace std;
const int N = 11;
int f[N][N]; //i个苹果放j个盘子
int main()
{
int t, m, n;
//记忆化搜索
for(int i=0; i<=10; i++)
for(int j=0; j<=10; j++)
{
if(i==0) f[i][j] = 1; //0个苹果,j个盘子,1种方法
else if(j==0) f[i][j] = 0; //0个盘子,0种方法
else if(i<j) f[i][j] = f[i][i]; //盘子数目大于苹果,至少有j-i个空盘子
else f[i][j] = f[i][j-1] + f[i-j][j]; //盘子数小于等于苹果数 -> 分类讨论: 有盘子为空,没有盘子为空
//有盘子为空的时候即至少有一个盘子为空,f(x,y-1);没有盘子为空即最少每个盘子都有一个,f(x-y,y)
}
cin>>t;
while(t--)
{
cin>>m>>n;
cout<<f[m][n]<<endl;
}
return 0;
}