LYD729

五年OI一场空,不开LongLong见祖宗

[JZOJ 3424] 粉刷匠 && [JZOJ 4254] 集体照

Description

有k种颜色的球,每种颜色有a[i]个,要把这些球排成一行,相邻的两个位置颜色不能相同,问可行排法。

Analysis

竟然是原题,比赛时我竟然没有想到,也没有看出来是原题( ⊙ o ⊙ ),做过的题又不会做了我真是。。。。
只能怪自己太弱!
其实比赛的时候知道是DP,一直在设状态乱搞。
题解的dp方法的思路非常值得学习。
f[i][j]表示做了前i种颜色,产生了j个不合法的位置。
那我们新来一种颜色,其实就是将若干个相同颜色的球插进原先的一个序列里。
s[n]=ni=1a[i],k表示将当前第i种颜色的球分成k组,t表示有t组将插到原来的j个不合法位置,则转移方程为

f[i][j+a[i]kt]+=f[i1][j]Ck1a[i]1CtjCkts[i1]j+1

三个组合数的意思分别是分组可行方案数,j组分t组可行方案数,剩下插入的方案数。
至于其他部分,可以自己模拟一下。

Key Code

f[0][0]=1;
  fo(i,1,n)
    fo(j,0,s[i-1])
      if(f[i-1][j])
        fo(k,0,a[i])
          fo(t,0,min(k,j))
            (f[i][j+a[i]-k-t]+=f[i-1][j]%mo*C[a[i]-1][k-1]%mo*C[j][t]%mo*C[s[i-1]-j+1][k-t]%mo)%=mo;
阅读更多
版权声明:本文为博主原创文章,转载请标明出处,谢谢。 https://blog.csdn.net/lyd_7_29/article/details/51548455
文章标签: dp
个人分类: 题解 DP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

[JZOJ 3424] 粉刷匠 && [JZOJ 4254] 集体照

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭