zoukankan      html  css  js  c++  java
  • [AGC002 F]Leftmost Ball

    题意

    (1cdots N)的颜色球,每种有(K)个。将所有的(N imes K)球进行排列,同时将每种颜色的第一个凃成颜色(0)(没出现过),问有多少种可能的颜色序列。

    • (N,Kleq 2000)

    分析

    先考虑一种最暴力的做法,就是我们考虑一个dp,设(f_{i,2^S})表示前(i)个里面已经选了(S)这一个集合的球,那么就很容易进行进一步dp了。

    但是,这个复杂度显然是炸上天了,我们肯定可以用某种方法进行改进。这里性能的瓶颈在于我们如何考虑已经选了的颜色。我们可以发现,这里所有的颜色本质上没有区别,也就是说,你完全可以把某两个颜色代表的意义换过来。

    这样我们发现,我们完全可以利用一个序的关系。曾经就有一个题目,按照排序强行做操作从而很高效地解决了题目,这里也可以利用类似的思路。我们考虑,将颜色按照某种方式排序,然后我们可以设出(f_{i,j})表示前(i)个数里面已经用了(1cdots j)的颜色,我们考虑转移有两种,一种是前面(j)种颜色里面添加一种,一种是添加一种新的颜色。我们如果考虑强行让选的顺序是递增的,那么我们下一个选的颜色就只能是(j),也就是从(f_{i-1,j-1})转移。由此很容易写出转移方程:(f_{i,j}=j imes f_{i-1,j}+f_{i-1,j-1})。这个方程就很容易在( ext O(NK))的时间内做完。实际上我们再看一眼:这不就是个斯特林数的递推式嘛!那我们只要套上斯特林数( ext O(Klog N))就做完了……因为对于斯特林数我们存在一个公式:

    [S(n,m)=frac{1}{m!}sumlimits_{k=0}^m(-1)^{m-k}inom{m}{k}k^n ]

    这个公式套进去就做完了……

  • 相关阅读:
    mysql 安装失败 start service执行不下去
    C# 打开钱箱支持北洋、佳博、爱普生
    CF1093E Intersection of Permutations [分块 +bitset]
    CF895C Square Subsets [线性基]
    线性基学习笔记
    长链剖分学习笔记
    GSS 系列题解
    P3206 [HNOI2010]城市建设 [线段树分治+LCT维护动态MST]
    线段树分治学习笔记
    [CF662C Binary Table][状压+FWT]
  • 原文地址:https://www.cnblogs.com/wendavid/p/9005254.html
Copyright © 2011-2022 走看看