题目描述
AC代码
#include<iostream>
using namespace std;
int kk;
long long mod = 1e9+7;
long long dp[1002][1002] = {0}; //记录已经出现过的情况
long long dfs(int n,int k)
{
if(dp[n][k]!=0)
return dp[n][k] % mod;
if(n==1||k==0)
{
dp[n][k]=1;
return 1;
}
else
{
long long k0 = dfs(n,k-1)%mod;//继续前进
long long k1 = dfs(n-1,kk-k)%mod;//反弹
dp[n][k] = (k0+k1)%mod;
return dp[n][k];
}
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>kk>>n;
memset(dp,0,sizeof(dp));
long long ans = dfs(n,kk);
cout<<ans<<endl;
}
}