[XSY3343] 程序锁(DP)
XSY3343
先考慮如何判定一個填好的序列會不會gg:
若?p,q,使s′[p+1]=t′[q+1]=?1\exist p,q,使s'[p+1]=t'[q+1]=-1?p,q,使s′[p+1]=t′[q+1]=?1且∑i=1ps′[i]+∑j=1qt′[j]≤0\sum_{i=1}^{p}s'[i]+\sum_{j=1}^{q}t'[j]\leq 0∑i=1p?s′[i]+∑j=1q?t′[j]≤0,則這個序列必gg。
那么我們只需找到sums′=mins′[p+1]=?1{∑i=1ps′[i]}sum_{s'}=min_{s'[p+1]=-1}\{\sum_{i=1}^{p}s'[i]\}sums′?=mins′[p+1]=?1?{∑i=1p?s′[i]},sumt′=mint′[q+1]=?1{∑j=1qt′[j]}sum_{t'}=min_{t'[q+1]=-1}\{\sum_{j=1}^{q}t'[j]\}sumt′?=mint′[q+1]=?1?{∑j=1q?t′[j]},判斷sums′+sumt′sum_{s'}+sum_{t'}sums′?+sumt′?是否≤0\leq0≤0即可判斷序列會不會gg。
為了方便,我們稍微轉換一下條件,把s′[p+1],t′[q+1]s'[p+1],t'[q+1]s′[p+1],t′[q+1]也納入sums′,sumt′sum_{s'},sum_{t'}sums′?,sumt′?中,即定義:
sums′=mins′[p]=?1{∑i=1ps′[i]}sum_{s'}=min_{s'[p]=-1}\{\sum_{i=1}^{p}s'[i]\}sums′?=mins′[p]=?1?{i=1∑p?s′[i]}
特別地,若s′[]s'[]s′[]全為1,sums′=∑i=1∣s′∣s′[i]sum_{s'}=\sum_{i=1}^{|s'|}s'[i]sums′?=∑i=1∣s′∣?s′[i]
sumt′=mint′[q]=?1{∑i=1qt′[i]}sum_{t'}=min_{t'[q]=-1}\{\sum_{i=1}^{q}t'[i]\}sumt′?=mint′[q]=?1?{i=1∑q?t′[i]}
特別地,若t′[]t'[]t′[]全為1,sumt′=∑i=1∣t′∣t′[i]sum_{t'}=\sum_{i=1}^{|t'|}t'[i]sumt′?=∑i=1∣t′∣?t′[i]
那么如果s′[],t′[]s'[],t'[]s′[],t′[]都不全為1,
有若sums′+sumt′≤?2sum_{s'}+sum_{t'}\leq-2sums′?+sumt′?≤?2,則序列必gg。
也即若sums′+sumt′≥?1sum_{s'}+sum_{t'}\geq-1sums′?+sumt′?≥?1,序列一定不會gg。
否則,若sums′+sumt′≥0sum_{s'}+sum_{t'}\geq0sums′?+sumt′?≥0,序列一定不會gg。
然后考慮DP,正著DP很困難,考慮倒著DP,這樣每次只會增加一個小前綴。
設fi,j,kf_{i,j,k}fi,j,k?表示填完[i,n][i,n][i,n],這些位置相對于iii的前綴和中,以?1-1?1結尾的最小前綴和=j=j=j的方案數,kkk表示jjj是否等于總和
如果i?1i-1i?1位可以填111,那么有fi,j,0→fi?1,j+1,0,fi,j,1→fi?1,j+1,1f_{i,j,0}\rightarrow f_{i-1,j+1,0},f_{i,j,1}\rightarrow f_{i-1,j+1,1}fi,j,0?→fi?1,j+1,0?,fi,j,1?→fi?1,j+1,1?,因為在最前面加一個111并不改變原來的最小前綴和
如果i?1i-1i?1位可以填?1-1?1,那么有fi,j,0→fi?1,min?(?1,j?1),0,fi,j,1→fi?1,min?(?1,j?1),[j≤0]f_{i,j,0}\rightarrow f_{i-1,\min(-1,j-1),0},f_{i,j,1}\rightarrow f_{i-1,\min(-1,j-1),[j\le0]}fi,j,0?→fi?1,min(?1,j?1),0?,fi,j,1?→fi?1,min(?1,j?1),[j≤0]?,因為增加了一個值為?1-1?1的前綴和,所以原來j>0j>0j>0且最小前綴和=j=j=j的方案會變為最小前綴和=?1≠j?1=-1\ne j-1=?1?=j?1
對兩個序列分別DP后直接統計答案即可
總結:
倒著DP 和 對s′,t′s',t's′,t′兩個序列分別DP 這兩點太巧妙了%%%
總結
以上是生活随笔為你收集整理的[XSY3343] 程序锁(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 丅恤如何穿搭
- 下一篇: [NOIP2016 提高组] 天天爱跑步