zoukankan      html  css  js  c++  java
  • 第十届蓝桥杯国赛C++B组 排列数

    排列数

    在一个排列中,一个折点是指排列中的一个元素,它同时小于两边的元素,或者同时大于两边的元素。

    对于一个 1∼n 的排列,如果可以将这个排列中包含 t 个折点,则它称为一个 t+1 单调序列。

    例如,排列 (1,4,2,3) 是一个 3 单调序列,其中 4 和 2 都是折点。

    给定 n 和 k,请问 1∼n 的所有排列中有多少个 k 单调队列?

    输入格式

    输入一行包含两个整数 n,k。

    输出格式

    输出一个整数,表示答案。

    答案可能很大,你可需要输出满足条件的排列数量除以 123456 的余数即可。

    数据范围

    1≤k≤n≤500

    输入样例:

    4  2
    

    输出样例:

     12




    思路参考自抽风巨巨的证明---> 链接
    import java.util.Scanner;
    
    public class Main{
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int k = sc.nextInt();
            int mod = 123456;
            int[][] dp = new int[550][550];
            dp[1][1] = 1;
            dp[2][1] = 2;
            for(int i=3;i<=n;i++) for(int j=1;j<=k&&j<=i;j++)
                if(j>=2) dp[i][j] = (dp[i-1][j] *j%mod +dp[i-1][j-1]*2%mod+dp[i-1][j-2]*(i-j)%mod)%mod;
                else dp[i][j] = (dp[i-1][j] *j%mod +dp[i-1][j-1]*2%mod)%mod;
            System.out.println(dp[n][k]);
        }
    }

       

  • 相关阅读:
    图片自动播放
    选项卡切换
    jquery实现全选、反选、不选
    JQuery $()后面的括号里的内容什么时候加引号,什么时候不加
    ajax跨域jsonp
    加班与效率
    提问的智慧
    程序员要勇于说不
    编程从业五年的十四条经验,句句朴实
    成为高效程序员的7个重要习惯
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14315661.html
Copyright © 2011-2022 走看看