标签:
Problem 3 Permutation (permutation.cpp/c/pas)
【题目描述】
将 1 到 N 任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。
问在所有排列中,有多少个排列恰好有K个“<”。
例如排列(3, 4, 1, 5, 2)
3 < 4 > 1 < 5 > 2
共有2个“<”
【输入格式】
N,K
【输出格式】
答案
【样例输入】
5 2
【样例输出】
66
【数据范围】
20%:N <= 10
50%:答案在0..2^63-1内
100%:K < N <= 100
思路:f[i,j]表示n为i,k为j时的序列数。
打了一张表发现规律了
i/j |
0 |
1 |
2 |
3 |
4 |
1 |
1 |
|
|
|
|
2 |
1 |
1 |
|
|
|
3 |
1 |
4 |
1 |
|
|
4 |
1 |
11(4*2+1*3) |
11(i*3+4*2) |
1 |
|
5 |
1 |
26(11*2+1*4) |
66(11*3+11*3) |
26(1*4+11*2) |
1 |
6 |
1 |
57(26*2+1*5) |
302(66*3+26*4) |
302(26*4+66*3) |
57(1*5+26*2) |
(红加蓝=i+1)
f[i,j]:=f[i-1,j]*(j+1) + f[i-j,j-1]*((i+1)-(j+1)) (j从0开始)
ps:要使用高精加
标签:
原文地址:http://www.cnblogs.com/liuxinyu/p/4936409.html