有 种颜色的球,标号 到 ,每种颜色有 个。将 个球随机排列后,将每种颜色的第一个球涂成颜色 ,求最终可能得到的颜色序列的方案数。
Constraints
Solution
令 表示已经放置了 个编号为 的球与 种第一次出现的位置最靠前的颜色的方案数。每次在当前的第一个空位放置一个颜色为 的球或是一种未出现的颜色的球。可得转移方程:
时间复杂度。
Code
1 |
|
Living is do or die.
有 n 种颜色的球,标号 1 到 n ,每种颜色有 k 个。将 nk 个球随机排列后,将每种颜色的第一个球涂成颜色 0 ,求最终可能得到的颜色序列的方案数。
1≤n,k≤2000
令 f(i,j) (i≤j) 表示已经放置了 i 个编号为 0 的球与 j 种第一次出现的位置最靠前的颜色的方案数。每次在当前的第一个空位放置一个颜色为 0 的球或是一种未出现的颜色的球。可得转移方程:
f(i,j)=f(i−1,j)+(k−2n−i+(n−j+1)⋅(k−1)−1)⋅(n−j+1)⋅f(i,j−1)
时间复杂度O(nk)。
1 | #include<cstdio> |