zoukankan      html  css  js  c++  java
  • 不等数列

    【题目描述】

    将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个数时,当插入一个'<'中或序列左端时,
      '<'数量不变,'>'数量+1,且可以插入的位置有j+1个;当插入一个'>'中或
      序列右端时,'>'数量不变,'<'数量+1,且可以插入的位置有i-j个。
          可得递推公式:
              f[i][j]=f[i-1][j]*(j+1)+f[i-1][j-1]*(i-j) 
    */
    #include<cstdio>
    #include<iostream>
    #define M 1010
    using namespace std;
    int f[M][M];
    int main()
    {
        int n,k;
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
          f[i][0]=1;
        for(int i=2;i<=n;i++)
          for(int j=1;j<=i-1;j++)
          {
              f[i][j]=f[i-1][j]*(j+1)+f[i-1][j-1]*(i-j);
              f[i][j]%=2012;
          }
           
        printf("%d",f[n][k]);
        return 0;
    }
    View Code
  • 相关阅读:
    PHP学习笔记十二【数组排序】
    PHP学习笔记十一【数组】
    PHP学习笔记十【数组】
    PHP学习笔记九【数组二】
    PHP学习笔记八【数组】
    Codeforces 612E
    Codeforces 616E
    codeforce #339(div2)C Peter and Snow Blower
    poj 1113 Mall
    poj 2187 Beauty Contest
  • 原文地址:https://www.cnblogs.com/harden/p/5598695.html
Copyright © 2011-2022 走看看