比赛 20121108 评测结果 AAAAAAAAAA
题目名称 K 上升段 最终得分 100
用户昵称 王者自由 运行时间 0.003 s
代码语言 C++ 内存使用 1.96 MiB
提交时间 2012-11-08 09:07:34
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 30;
int n, k;
unsigned long long int f[N][N];
int main() {
    freopen("k.in", "r", stdin);
    freopen("k.out", "w", stdout);
    scanf("%d %d", &n, &k);
    /* int a[N], b[N][N];
    for(n=1; n<=20; n++) {
        for(int i=1; i<=n; i++)
            a[i-1] = i;
        a[n] = n + 1;
        do {
            int s = 0;
            for(int i=0; i<n; i++) {
                while(a[i] < a[i+1]) i++;
                s++;
            } b[n][s]++;
        } while(next_permutation(a, a+n));
        printf("%d\n", b[k]);
        fprintf(stderr, "%d: ", n);
        for(int i=0; i<=n; i++)
            fprintf(stderr, "%d ", b[n][i]);
        fprintf(stderr, "\n");
    } */
    for(int i=0; i<=n; i++)
        f[i][1] = 1;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=i; j++)
            f[i][j] = (i - j + 1) * f[i-1][j-1] + j * f[i-1][j];
    /* for(int i=1; i<=n; i++) {
        fprintf(stderr, "%lld: ", i);
        for(int j=1; j<=i; j++)
            fprintf(stderr, "%lld ", f[i][j]);
        fprintf(stderr, "\n");
    } */
    printf("%lld\n", f[n][k]);
    return 0;
}