复杂度
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
for(k=j+1;k<=n;k++)
operation;
你知道 operation 共执行了多少次吗;
-
输入
-
输入 m 和n 表示m为for循环的层数,n为for中的n。
(n,m<=2000),输入以n==0和m==0结束
输出
- 输出operation执行的次数(输入结果mod 1009) 样例输入
-
2 3 1 3 2 4 0 0
样例输出
-
3 3
6
-
//仔细一看就是C(n, m)的问题, 杨辉三角打表水过。。。 #include <stdio.h> int dp[2001][2001]; void init() { for(int i = 0; i <= 2000; i++) { for(int j = 0; j <= i; j++) { if(j == 0 || i == j) { dp[i][j] = 1; } else { dp[i][j] = (dp[i-1][j-1]+dp[i-1][j]) % 1009; } } } } int main() { int n, m; init(); while(scanf("%d%d", &m, &n) && (m+n)) { printf("%d\n", dp[n][m]); } return 0; }
-
输入 m 和n 表示m为for循环的层数,n为for中的n。