zoukankan      html  css  js  c++  java
  • 组合计数·经典序列问题

    1. LA 5092 Permutation Counting

    题意:给定$1sim n$的排列${a_1, a_1,..., a_n}$,满足$a_i > i $的下标$i$的个数称为此排列的$E$值,

    例如${1,3,2,4}$的$E$值为$1$,${4, 3, 2, 1}$的$E$值为$2$,给定整数$n$和$k(1 leq n leq 1000, 0 leq k leq n)$,

    求$E$值恰好为$k$的排列个数。

    分析:我们可以这样从$1sim (i-1)$的排列构造为$1 sim i$的排列:将$i$放在$1 sim (i-1)$的一个排列的末尾,

    再考虑将其分别与$1sim (i-1)$排列的任一个数交换,便可得到$(1 + i - 1) cdot (i - 1) ! = i!$个新的排列。由此考虑

    将$1sim i$的排列满足$E$值为$j$的个数设为$dp(i, j)$,那么将数$i$放置在末尾或者与那些已经贡献$1$的位置进行交换总的贡献不变,

    反之则加$1$,因此有状态转移:

    $dp(i, j) = (1 + j) * dp(i - 1, j) + (i - j) * dp(i - 1, j - 1)$

    边界条件:

    $dp(i, 0) = 1$

    2.

  • 相关阅读:
    Ceph相关
    Redis学习
    docker mysql
    WebSocket学习与使用
    nginx学习与使用
    python学习小记
    基数计数——HyperLogLog
    Swagger使用小记
    理解Java枚举类型
    Jenkins使用
  • 原文地址:https://www.cnblogs.com/astoninfer/p/5745053.html
Copyright © 2011-2022 走看看