递推

A - 递推
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

  我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如, 
如果代码中出现 
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

  有T组case,T<=10000。每个case有两个整数m和n,0<m<=2000,0<n<=2000.

Output

  对于每个case,输出一个值,表示总的计算量,也许这个数字很大,那么你只需要输出除1007留下的余数即可。

Sample Input

2
1 3
2 3

Sample Output

3
3


//尴尬,这题没找出规律,,,就是你画个 n,m 的二维的表,就很容易看出规律了
具体的原因

 1 #include <stdio.h>
 2 #define MAXN 2005
 3 
 4 int d[MAXN][MAXN];
 5 
 6 void count()
 7 {
 8     int i, j;
 9     for(i = 1; i < MAXN; ++i)
10         d[i][1] = i % 1007;
11 
12     for(i = 1; i < MAXN; ++i)
13         for(j = 2; j < MAXN; ++j)
14             d[i][j] = (d[i-1][j] + d[i-1][j-1]) % 1007;
15 }
16 
17 int main()
18 {
19     int n, m, t;
20     count();
21     scanf("%d", &t);
22     while(t--)
23     {
24         scanf("%d%d", &m, &n);
25         printf("%d
", d[n][m]);
26     }
27     return 0;
28 }
View Code
 
原文地址:https://www.cnblogs.com/haoabcd2010/p/5742643.html