zoukankan      html  css  js  c++  java
  • 洛谷 P2401 不等数列 题解

    题面

    显然,nn个位置可以选择,我们先来考虑两边的位置。

    如果插入到最左边,会造成新的序列比原来多一个大于号

    如果插入到最右边,会造成新的序列比原来多一个小于号

    如果插入到大于号的位置,删去一个大于号,多一个大于号一个小于号,也就是多一个小于号

    如果插入到小于号的位置,删去一个小于号,多一个大于号一个小于号,也就是多一个大于号

    那么显然:

    f[i+1][j]=(f[i+1][j]+(f[i][j]*(j+1)))%p;
    f[i+1][j+1]=(f[i+1][j+1]+(f[i][j]*(i-j)))%p;

    #include <bits/stdc++.h>
    #define p 2015;
    using namespace std;
    long long f[1010][1010];
    int main()
    {
        int n,m;
        cin>>n>>m;
        f[0][0]=1;
        for(int i=0;i<=n;i++){
            for(int j=0;j<=m;j++){
                f[i+1][j]=(f[i+1][j]+(f[i][j]*(j+1)))%p;
                f[i+1][j+1]=(f[i+1][j+1]+(f[i][j]*(i-j)))%p;
            }
        }
        cout<<f[n][m]%p;
    }
  • 相关阅读:
    linux内核启动汇编部分详解
    linux内核zImage详解
    Linux内核zImage怎么来的?
    Linux内核编译make做了什么?
    关于makefile的几点经验
    note
    tmp0000
    tmp
    SSL学习与总结
    C++学习笔记
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11459738.html
Copyright © 2011-2022 走看看