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

    题目链接

    Solution

    状态设计

    (f_{i, j})(1)(i) 的排列,其中有 (j)( ext{‘<’}) 的方案数。

    状态转移

    尝试从 (i) 转移到 (i + 1),实质是考虑把 (i + 1) 插入到序列的哪个位置。

    • 如果插入到最左边,会新增一个大于号((1) 种情况)
    • 如果插入到最右侧,会新增一个小于号((1) 种情况)
    • 如果插入到一个小于号之间,会破坏一个小于号,产生一个小于号和一个大于号,相当于新增一个大于号((j) 种情况)
    • 如果插入到一个大于号之间,会破坏一个大于号,产生一个大于号和一个小于号,相当于新增一个小于号((i - 1 - j) 种情况)

    综上所述:

    • (j + 1) 种情况增加一个大于号,即 (f[i + 1][j] gets f[i][j] * (j + 1))
    • (i - j) 种情况增加一个小于号,即 (f[i + 1][j + 1] gets f[i][j] * (i - j))

    Code

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    const int N = 1005, P = 2015;
    
    int n, K, f[N][N];
    
    int main() {
    	scanf("%d%d", &n, &K);
    	f[1][0] = 1;
    	for (int i = 1; i < n; i++) {
    		for (int j = 0; j < i; j++) {
    			(f[i + 1][j] += f[i][j] * (j + 1)) %= P;
    			(f[i + 1][j + 1] += f[i][j] * (i - j)) %= P;
    		}
    	}
    	printf("%d
    ", f[n][K]);
    }
    
  • 相关阅读:
    mysql正则表达式
    阿里云OSS 获取目录下所有文件
    docker 部署mvc项目 <四>
    docker部署项目 <三>
    docker 安装mysql数据库 <二>
    docker安装 <一>
    安装 Docker <一>
    Mongodb字段自增长
    EF的使用<三>
    EF 简单介绍<一>
  • 原文地址:https://www.cnblogs.com/dmoransky/p/12482188.html
Copyright © 2011-2022 走看看