#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL __int64
const int maxn=2002;
const int mod=1007;
int dp[maxn][maxn];
void init()
{
memset(dp,0,sizeof(dp));
int i,j,k;
for(i=1;i<maxn;i++)
dp[i][1]=i%mod;
//m>n时,dp=0
for(i=2;i<maxn;i++)//n
{
dp[i][i]=1;
for(j=2;j<i;j++)//m
dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%mod;
}
}
int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
int n,m,i,j,k;
scanf("%d%d",&m,&n);
printf("%d\n",dp[n][m]);
}
return 0;
}
/*
动态规划:
dp[i][j]表示j层,终止值为i的计算量。
则dp[i][j]=∑dp[k][j](0<=k<=n-1)=dp[i-1][j]+dp[i-1][j-1];
*/
hdu 1799 循环多少次? 动态规划
最新推荐文章于 2018-06-04 18:50:17 发布