[CSA35G][XSY3318]Counting Quests (DP)
XSY3318
CSA35G
對于一個詢問區間的集合SSS,求出每一個數被哪些區間覆蓋了,記為SiS_iSi?。
要能保證猜出選中數,當且僅當每個數的SiS_iSi?互不相同。
考慮求出不滿足要求的集合SSS的個數。
首先可以觀察得到SiS_iSi?的一個性質:若a<b<c<da<b<c<da<b<c<d且Sa=Sc,Sb=SdS_a=S_c,S_b=S_dSa?=Sc?,Sb?=Sd?,則必有Sa=Sb=Sc=SdS_a=S_b=S_c=S_dSa?=Sb?=Sc?=Sd?。
證明:因為Sa=ScS_a=S_cSa?=Sc?,所以如果一個區間覆蓋了aaa,一定也覆蓋了ccc,那么這個區間一定也覆蓋了bbb,又因為Sb=SdS_b=S_dSb?=Sd?,所以該區間一定也覆蓋了ddd。同理可證覆蓋了bbb或ccc或ddd的區間一定也覆蓋了其它三個數。
我們給每個數一個編號aia_iai?,滿足當且僅當SiS_iSi?相同的數aia_iai?相同。
由剛才的性質我們知道,不同的aaa值的排布 只可能是以下情況:
–x--xx–xy—y–yy–(x,yx,yx,y出現范圍呈并列關系)
–x--y-yy-y-x-xx-----(x,yx,yx,y出現范圍呈包含與被包含關系)
不可能是這種情況:
–xx-y-x-x-yyy-------(x,yx,yx,y出現范圍呈相交關系)
所以可以把 構造形如 x–xy–yz–z 的序列aaa 分解成 構造形如 x—x 的序列aaa,構造形如 y–y 的序列aaa,構造形如 z–z 的序列aaa 三個子問題。
并且在構造形如 x—x 的序列aaa時, — 不管怎么填,最后得到的方案都一定猜不出選中數。
y–y , z–z 同理。
形式化地,每次把aaa中的第一個數xxx放入bbb的末尾,然后在aaa中刪掉最后一個xxx前的所有數(包括最后一個xxx)。
例如a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]a=[1,2,3,2,4,2,5,5,10,6,7,8,7,6,9]
此時b=[1,2,5,10,6,9]b=[1,2,5,10,6,9]b=[1,2,5,10,6,9]
可以發現,只包含被刪掉數的區間可有可無,但包含未被刪掉數的區間一定要使未被刪掉數的aaa值互不相同,即這些包含未被刪掉數的區間對應著一個長度為∣b∣|b|∣b∣的序列的答案。
例如序列bbb中一個包含1,2的區間,對應著序列aaa中一個包含1,2,3,2,4,2的區間。
那么就可以DP了:
記fif_ifi?為iii個數的答案,gi,jg_{i,j}gi,j?為iii個數,處理之后之剩jjj個數的答案。則有:
fi=2Ci+12?∑j=1i?1fjgi,jf_i=2^{C_{i+1}^{2}}-\sum_{j=1}^{i-1}f_jg_{i,j}fi?=2Ci+12??j=1∑i?1?fj?gi,j?
gi,j=gi?1,j?1+∑k=0gi?k?2,j?12Ck+12g_{i,j}=g_{i-1,j-1}+\sum_{k=0}g_{i-k-2,j-1}2^{C_{k+1}^{2}}gi,j?=gi?1,j?1?+k=0∑?gi?k?2,j?1?2Ck+12?
時間復雜度:O(n3)O(n^3)O(n3)或O(n2logn)O(n^2logn)O(n2logn)
還可以用多項式優化,但我不會。
總結
以上是生活随笔為你收集整理的[CSA35G][XSY3318]Counting Quests (DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闻泰科技第三季度净利润 8.48 亿元同
- 下一篇: [CSA49G][XSY3315] Bu