zoukankan      html  css  js  c++  java
  • hdu 1133

    题意:有m个人,每人只有一张50元,还有n个人,每人只有一张100元,这些人排队买50元的电影票。售票处一开始没有钱,问要让这m+n个人全部顺利买票的排队方法有多少种。

    分析:把只有50元的人记为0,把只有100元的人记为1,问题等价于,m个0,n个1组成的序列中,由左向右累计,在任意一个位置的0的累计数都不少于1的累计数的序列有多少排列方式,结果再乘以m!n!(因为每个人都是不同的)。

    这道题有一个巧妙的解法:

    n=0时,答案显然是m!

    m<n时,答案是0

    现在讨论m>=n的情况。

    m=6,n=6时,一个非法的序列例如,001101100011(6个0,6个1),把第一个使序列非法的1右面的每个位翻转,即变成001101111100(5个0,7个1),可以看出每个非法的序列(6个0,6个1)都对应一个5个0,7个1的序列。

    可以证明m个0,n个1的任意一个非法序列的翻转结果都是n-1个0,m+1个1的序列,而且前者跟后者是一一对应关系。因此,当我们知道n-1个0,m+1个1的序列的排列总数也就知道我们想求的序列的非法数。

    所以这种情况下的最终答案是(C(m+n,m) - C(m+n,m+1))*m!*n!。

  • 相关阅读:
    SQLite 基本使用
    SQLite 语法
    html5晋级之路-css介绍
    html5晋级之路-web storage
    html5晋级之路-元素语法
    html晋级之路-背景、实体
    ios-晋级之路 CocoaPods的使用
    如何在Mac OS X上安装 Ruby运行环境
    html5晋级之路-学习笔记表单
    html5晋级之路-学习笔记
  • 原文地址:https://www.cnblogs.com/ZShogg/p/3410700.html
Copyright © 2011-2022 走看看