描述
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(m,n),通过组合公式C(m,n) = C (m,n-1)+C(m-1,n-1)可解。
#include<iostream> #include<cstdio> using namespace std; int s[2010][2010]; //c(m,n) = c(m-1,n-1)+c(m,n-1) void fun() { int i,j; for(i = 1; i <= 2000; i++) { for(j = 1; j <= 2000;j++) { if(i == j) s[i][j] = 1; else if(i == 1) s[i][j] = j % 1009; else s[i][j] = (s[i][j-1]+s[i-1][j-1])%1009; } } } int main() { int m,n; fun(); while(scanf("%d%d",&m,&n) && m+n) { printf("%d\n",s[m][n]); } }