关闭

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

标签: dp
262人阅读 评论(0) 收藏 举报
分类:

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;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:91464次
    • 积分:4184
    • 等级:
    • 排名:第8062名
    • 原创:308篇
    • 转载:5篇
    • 译文:0篇
    • 评论:32条
    公告
    bzoj3110 jzoj 5295 5260 5261 5316
    最新评论
    文章分类