uestc 1721 吴神,人类的希望

时间:2023-03-09 01:00:05
uestc 1721 吴神,人类的希望
// 将n个相同的球放进m个盒子 盒子不为空的方法总数
// dp[i][j] 表示i个盒子 j个球的方法总数
// 递推关系 dp[i][j]=dp[i-1][j-1]+d[i][j-i]
// a. i-1个盒子放j-1个球 第j个球放进第i个盒子中
// b. i个盒子放了j-i个球 再放进i个球 每个盒子放一个
// 注意 ans=ans+dp[i][n-k*i+i] 这里的 n-k*i+i
// 加 i 的目的是为了 n-k*i+i>=i 这样就得到盒子不为空计数 #include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 1000010
#define maxm 1000010
#define LL long long
int dp[][];
int main(){
int i,j;
dp[][]=;// dp[i][0]=0;
for(i=;i<=;i++)
{
dp[i][i]=;
for(j=i+;j<=;j++)
dp[i][j]=(dp[i-][j-]+dp[i][j-i])%MOD;
}
// for(i=1;i<=1000;i++)
// printf("%d ",dp[i][i]);
int T;
scanf("%d",&T);
int m,n,k;
while(T--){
scanf("%d %d",&n,&k);
m=n/k;
int ans=;
for(int i=;i<=m;i++){
ans=(ans+dp[i][n-k*i+i])%MOD;
}
printf("%d\n",ans);
}
}