CF626F Group Projects

发布时间 2023-09-06 15:23:24作者: 御坂夏铃

发现直接做非常困难,考虑将能力值排序后从小到大插入。

\(f_{i,j,l}\) 表示前 \(i\) 个人,有 \(j\) 组需要继续加人,不和谐度之和恰好\(l\) 的方案数。此时加入一个人对不和谐度之和产生的贡献为 \(t=j\times(a_{i+1}-a_i)\)。分三种情况转移:

  • 组数加一,即第 \(i+1\) 个人新开一组,然后该组还需要继续加人

    \[f_{i+1,j+1,l+t}\gets f_{i+1,j+1,l+t}+f_{i,j,l} \]

  • 组数不变。第 \(i+1\) 个人新开一组,然后该组不需要继续加人;或加入了一个原有的组,然后该组还需要继续加人

    \[f_{i+1,j,l+t}\gets f_{i+1,j,l+t}+f_{i,j,l}\times(j+1) \]

  • 组数减一,即第 \(i+1\) 个人加入了一个原有的组,然后该组不需要继续加人

    \[f_{i+1,j-1,l+t}\gets f_{i+1,j-1,l+t}+j\times f_{i,j,l} \]

最后的答案就是 \(\sum\limits_{l=0}^k f_{n,0,l}\)

其实这道题无论是预处理还是 DP 部分都和 JOI2012 的袋鼠十分相似,都是通过排序来确定每次发生的变化,状态都是记录遗留下来需要继续做的量。