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]); } }