HDU-4475 Downward paths 递推

题意:给定一个很优美的三角形,问从第1层走到第N层的走法有多少种?

解法:由于每一层能够向左右行走到任意位置再向下走,所以设f[i]为从第一层到第 i 层的方案数,则有递推关系f[i] = f[i-1] * 2 * i。由于最后的结果是对1000003取余,所以1000003之后的结果一定都为零。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;

const int MOD = 1000003;
long long N;
int f[1000005];

void pre() {
    f[1] = 2;
    for (int i = 2; i <= 1000003; ++i) {
        f[i] = (1LL * f[i-1] * 2 * i) % MOD;
    }
}

int main() {
    int T;
    pre();
    scanf("%d", &T);
    while (T--) {
        scanf("%I64d", &N);
        if (N < 1000003) {
            printf("%d\n", f[N]);    
        } else {
            puts("0");    
        }
    }
    return 0;    
} 

 

posted @ 2013-05-31 18:00  沐阳  阅读(202)  评论(0编辑  收藏  举报