如果代碼中出現
for(i=1;i<=n;i++) OP ;
那麼做了n次OP運算,如果代碼中出現
fori=1;i<=n; i++)
for(j=i+1;j<=n; j++) OP;
那麼做了n*(n-1)/2 次OP 操作。
現在給你已知有m層for循環操作,且每次for中變量的起始值是上一個變量的起始值+1(第一個變量的起始值是1),終止值都是一個輸入的n,問最後OP有總共多少計算量。
Input
Output
Sample Input
Sample Output
3
注:題意就是組合數的概念,然後組合數利用楊輝三角求。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <string>
using namespace std;
#define pi acos(-1,0)
#define INF 2147483647
int max(int a,int b)
{
return a>=b?a:b;
}
int s[2001][2001];
int main()
{
int t,n,m,i,j;
memset(s,0,sizeof(s));
for(i=1;i<2001;i++)
s[i][0]=1;
s[1][1]=1;
for(i=2;i<2001;i++)
{
for(j=1;j<=i;j++)
s[i][j]=(s[i-1][j-1]+s[i-1][j])%1007;
}
while(scanf("%d",&t)!=EOF)
{
while (t--)
{
scanf("%d %d",&m,&n);
printf("%d\n",s[n][m]);
}
}
return 0;
}