比赛 |
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;
}