zoukankan      html  css  js  c++  java
  • 2018 “百度之星”程序设计大赛

    度度熊看球赛

    Problem Description
    世界杯正如火如荼地开展!度度熊来到了一家酒吧。

    有 N 对情侣相约一起看世界杯,荧幕前正好有 2×N 个横排的位置。

    所有人都会随机坐在某个位置上。

    当然,如果某一对情侣正好挨着坐,他们就会有说不完的话,影响世界杯的观看。

    一般地,对于一个就座方案,如果正好有 K 对情侣正好是挨着坐的,就会产生 DK 的喧闹值。

    度度熊想知道随机就座方案的期望喧闹值。

    为了避免输出实数,设答案为 ans,请输出 ans×(2N)! mod P 的值。其中 P=998244353

    Input
    有多组数据(不超过 1000 组),读到EOF结束。

    对于每一组数据,读入两个数 N 和 D 。

    1≤N,D≤1000

    Output
    对于每一组数据,输出一个数表示答案。

    Sample Input

    1 10
    2 3

    Sample Output

    20
    104

    题解:
    官方题解其实已经解释得很好了,这样 dp 的确很巧妙。

    dp[i][j] 表示前 i 对情侣,有 j 对坐在一起的方案数。
    首先为了简便,我们把每对情侣中两个人看作是相同的两个人,最后乘上 2^n 即可。
    最后要求 ans×(2N)!,也就是求出 i 对情侣坐位所有不同方案数。
    然后由前 i 对递推转移到前 i+1 对 :
    1、第 i+1 对在一起:
    (1)第 i+1 对插入进另一对中间, dp[i+1][j] += dp[i][j] * j ;
    (2)第 i+1 对不插入另一对中间,dp[i+1][j+1] += dp[i][j] * (2*i+1-j) ;
    2、第 i+1 对不在一起:
    (1)第 i+1 对的两个人分别插入另外两对中间,dp[i+1][j-2] += dp[i][j] * C(j,2) ;
    (2)第 i+1 对的两个人只有一个人插入到另一对中间,dp[i+1][j-1] += dp[i][j] * C(j,1) ;
    (3)第 i+1 对的两个人都不插入其它对里,dp[i+1][j] += dp[i][j] * C(2*i+1-j, 2) ;

    代码懒得写了_

  • 相关阅读:
    MySQL 主主同步配置和主从配置步骤
    Nginx 禁止访问某个目录或文件的设置方法
    LNMP笔记:更改网站文件和MySQL数据库的存放目录
    centos最小安装 setuptools安装
    mkdir命令
    linux的mount(挂载)命令详解
    Java中wait()和notify()方法的使用
    剑指 offer面试题22 栈的压入和弹出序列
    剑指 offer面试题20 顺时针打印矩阵
    Leetcode 23.Merge Two Sorted Lists Merge K Sorted Lists
  • 原文地址:https://www.cnblogs.com/sbfhy/p/9464047.html
Copyright © 2011-2022 走看看