这道题如果暴力求解的话,一共有10000行测试,每行数据范围2000,那么总共就是,也就是2千万。
我们预处理一下,a,b的范围是2000,那a.b的不同对数就是,也就是400万,400的万的数据我们可以用递推的组合公式两个for循环也不会超时。
我们可以利用下面的公式在时间内求出所有值:
公式怎么来的:
#include<iostream>
using namespace std;
const int N=2010;
const int mod=1e9+7;
int c[N][N];
int n;
void sovel()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<=i;j++)
{
if(!j)c[i][j]=1;//从i中取0个苹果,就是不取,不取也是一种方案
else c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
}
}
int main()
{
cin>>n;
while(n--)
{
int a=0,b=0;
cin>>a>>b;
sovel();
cout<<c[a][b]<<endl;
}
return 0;
}