/*
定义状态dp[i][j]大小为i,分解成j个数的和有多少种可能
状态转移方程为,dp[i][j]=dp[i-j][1]+dp[i-j][2]+...dp[i-j][j];
*/
#include<stdio.h>
#include<string.h>
int main()
{
int dp[105][105],i,j,n,m,k,t;
memset(dp,0,sizeof(dp));
for(i=0; i<101; i++)
dp[i][1]=1;
for(i=2; i<101; i++)
for(j=2; j<101&&j<=i; j++)
{
int sum=0;
for(k=1; k<=j; k++)
sum+=dp[i-j][k];
dp[i][j]=sum;
}
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
printf("%d\n",dp[n][m]);
}
return 0;
}
定义状态dp[i][j]大小为i,分解成j个数的和有多少种可能
状态转移方程为,dp[i][j]=dp[i-j][1]+dp[i-j][2]+...dp[i-j][j];
*/
#include<stdio.h>
#include<string.h>
int main()
{
int dp[105][105],i,j,n,m,k,t;
memset(dp,0,sizeof(dp));
for(i=0; i<101; i++)
dp[i][1]=1;
for(i=2; i<101; i++)
for(j=2; j<101&&j<=i; j++)
{
int sum=0;
for(k=1; k<=j; k++)
sum+=dp[i-j][k];
dp[i][j]=sum;
}
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
printf("%d\n",dp[n][m]);
}
return 0;
}