不等数列

【题目描述】

将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。问在所有排列中,有多少个排列恰好有k个“<”。答案对2012取模。

【输入描述】

第一行2个整数n,k。

【输出描述】

一个整数表示答案。

【样例输入】

5 2

【样例输出】

66

【数据范围及提示】

对于30%的数据:n <= 10;

对于100%的数据:k < n <= 1000。

源代码:

#include<cstdio>
const int q=2012;
int n,k,f[1001][1001]={0};
int main()
{
    scanf("%d%d",&n,&k);
    for (int a=1;a<=n;a++)
      f[a][0]=1; //边界好坑爹!!!
    for (int a=2;a<=n;a++)
      for (int b=1;b<=k&&b<a;b++) //状态转移方程挺容易的,不过一定要注意思考全面。
        f[a][b]=((f[a-1][b]*(b+1))%q+(f[a-1][b-1]*(a-b))%q)%q;
    printf("%d",f[n][k]);
    return 0;
}
时间: 2024-10-02 02:17:28

不等数列的相关文章

Codevs 4357 不等数列

不等数列 [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式] 第一行2个整数n,k. [输出格式] 一个整数表示答案. [样例输入] 5 2 [样例输出] 66 [数据范围] 对于30%的数据:n <= 10 对于100%的数据:k < n <= 1000, 对于30% n<=10的数据,搜索打表,状态压缩动态规划...... 对于1--n等

动态规划 洛谷P2401 不等数列

P2401 不等数列 题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"<".答案对2015取模. 注:1~n的排列指的是1~n这n个数各出现且仅出现一次的数列. 输入输出格式 输入格式: 第一行2个整数n,k. 输出格式: 一个整数表示答案. 输入输出样例 输入样例#1: 5 2 输出样例#1: 66 说明 对于30%的数据:n <= 10

[模拟赛] T2 不等数列

Description 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"<".答案对2015取模. 注:1~n的排列指的是1~n这n个数各出现且仅出现一次的数列. Input 第一行2个整数n,k. Output 一个整数表示答案. Range 对于30%的数据:n <= 10 对于100%的数据:k < n <= 1000 Solutio

[luoguP2401] 不等数列

传送门 f[i][j]表示前i个数有j个<的方案数 #include <cstdio> #define N 1001 #define p 2015 int n, k; int f[N][N]; int main() { int i, j; scanf("%d %d", &n, &k); f[2][0] = 1; f[2][1] = 1; for(i = 3; i <= n; i++) for(j = 0; j < i; j++) { //插

不等数列(noip 2014 模拟题)

[题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2012取模. [输入格式] 第一行2个整数n,k. [输出格式] 一个整数表示答案. [样例输入] 5 2 [样例输出] 66 [数据范围] 对于30%的数据:n <= 10 对于100%的数据:k < n <= 1000, /* f[i][j]向前i位数中插入j个'<’种数 当我们向长为i-1序列中插入第i个数时,当

HUAS 1476 不等数列(DP)

考虑DP. 如果把转移看出当前位填什么数的话,这样是有后效性的. 如果考虑当前的序列是将1至n依次插入序列中的话. 考虑将i插入1到i-1的序列中,如果插入到<号中或者首部,那么最后就会多出一个大于号. 如果插入到>号中或者尾部,那么最后就会多出一个小于号. 所以定义状态dp[i][j]表示1到i组成的序列中,小于号的数目为j的方法数.转移方程即为所求. # include <cstdio> # include <cstring> # include <cstdl

noip模拟赛 不等数列

题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"<".答案对2012取模. 输入输出格式 输入格式: 第一行2个整数n,k. 输出格式: 一个整数表示答案. 输入输出样例 输入样例#1: 5 2 输出样例#1: 66 说明 对于30%的数据:n <= 10 对于100%的数据:k < n <= 1000 分析:求方案数,想不到数学

洛谷 P2401 不等数列

其实有两种方法来解这道题 第一种:找规律(非正经) 一看,这玩意像是个杨辉三角,还左右对称呢 因为新插入一个数$n$,有$n+1$个位置可以选,所以总数就乘$n+1$,对应的$f[n+1][i]$也就等于$f[n][i]$了大概.可是一看,不大对,好像不是这样.那么就像,反正加一个数要么没变,要么加一个小于号,那么不在$f[n+1][i]$的一定是分到了$f[n+1][i+1]$里去了.那么以$n=3$时为例,$f[3][1]4=4,f[4][1]=1$也就是接收了$1$倍的$f[3][1]$.

6.28 不等序列

Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个"<".答案对2012取模. [输入格式] 第一行2个整数n,k. [输出格式] 一个整数表示答案. [样例输入] 5 2 [样例输出] 66 [数据范围] 对于30%的数据:n <= 10 对于100%的数据:k<n<=