文章摘要
LIK.CC-GPT
|
题目
题解
f[i[[j]表示将i分成j个数有多少中分法。
将一个数字m分成n个数字,有两种分法:
- 最小值为0,则f[i][j]=f[i][j-1];
- 最小值不为0,则可以将原方案数每个数字-1,这样方案数不会改变,但是状态会减小,即f[i][j]+=f[i-j][j]
#include<iostream>
using namespace std;
const int N=11;
int T;
int main(){
cin>>T;
while(T--){
int n,m;
cin>>m>>n;
int f[N][N]={0};
f[0][0]=1;
for(int i=0;i<=m;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i][j-1];
if(i>=j)f[i][j]+=f[i-j][j];
}
}
cout<<f[m][n]<<endl;
}
return 0;
}