zoukankan      html  css  js  c++  java
  • codeforces problem 140E New Year Garland

    排列组合题
    题意
    用m种颜色的彩球装点n层的圣诞树。圣诞树的第i层恰由l[i]个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不同。求有多少种装点方案,答案对p取模。
    只要任一位置上的彩球颜色不同,就算作不同的方案。
    1 <= n,m <= 10^6, 2 <= p <= 10^9, 1 <= l[i] <= 5000, Σl[i] <= 10^7
    若只考虑一层,就是bzoj1008的越狱,但是要考虑上下两层不同,卒。
    考虑只在一层中,使用前j种颜色,前i个位置。
    不是很好写,引入了最小表示法的思想,使第j种颜色一定要出现于第j-1种后才行
    f[i][j]=f[i-1][j](j-1)+f[i-1][j-1];
    这样表示的话会少了排列 因此算方案时只要
    j!即可

    然后考虑一层层算
    d[i][j]表示第i层用了j种颜色(不包括前i-1层的颜色)
    那么 就有
    d[i][j]=C(j,m)j!f[l[i]][j]Σd[i-1][k] -x(x为冲突情况情况数)
    因为d[i-1][j]中已经计算了排列和组合
    因此不用再乘组合数 所以x=d[i-1][j]
    f[l[i]][j]*j!
    因此解决

  • 相关阅读:
    flex 连接mysql
    正确配置调试world wind on vs2008
    FLex调用servlet连接数据库
    c# 连接mysql并webservice数据
    ADF连接SOM
    转载加收藏关于OPENGL配置VS2008
    flex不能显示本地发布的地图
    Symbian专区
    asp.net控件开发基础學習
    控制网页大小
  • 原文地址:https://www.cnblogs.com/wkingG/p/5260498.html
Copyright © 2011-2022 走看看