题目链接:http://wikioi.com/problem/1778/
分析:
我们先思考,当只有一个序列时,如何求出其有多少个不重复的子序列?显然可以定义F[I]表示这个序列的前I位有多少个不同的子序列,转移方程很简单,因为第I个字母可以接在某序列的后面,也可以不接,自然就是F[I]=F[I-1]*2。这样我们会发现答案就是2^长度。但是,这显然是错的。因为我们没有判重!
要知道如何去重,就必须知道出现重复序列的原因!
设当前位S[I]=’a’,并且存在一个最大的J,使得J<I且S[J]=‘a’,那么当阶段在J的时候,我们可以选择是够让F[J-1]个序列接上S[J]。同理,阶段在I的时候,可以选择是否让F[I-1]个序列接上S[I]。显然,F[I-1]包含了所有F[J