首先考慮怎麼暴力 dp,然後發現難點在於怎麼知道不受影響的格點的個數。
其實特殊之處在於碰到矩形邊界之後沒辦法計數,所以考慮列舉在哪個位置碰到了矩形邊界。
然後發現每次轉移是類似的,只要求 $a$ 次向下走,$b$ 次向右走,$c$ 次在邊界上走能貢獻的總的權值。
其實等價於求所有滿足 $x_1+...+x_a+y_1+...+y_b+z_1+...+z_c=s$ 的序列的權值 $x_1*...*x_a*(y_1+1)*...*(y_b+1)$ 的權值和。
其中 $x,y,z$ 的取值都可以是 $0$ ,然而容易發現如果 $x$ 在取值為 $0$ 的時候不產生貢獻,可以欽定取值至少為 $1$ 。
然後把 $y+1$ 這個東西轉化一下,給等號的右邊加上乙個 $b$ ,現在的權值就變成了 $x_1*...*x_$,這個可以直接用插板來計算。
然後發現其實是左右分別插板,然後組合數的形式是 $\sum \limits_^\binom\binom$。
這個東西可以轉化為在列舉集合的劃分點,所以組合數就等於 $\binom$,然後只要考慮一下沒有被經過的點的貢獻、經過的不同路徑產生的方案數的貢獻就好了。
直接用完全圖的話,沒有辦法進行 dp。
然後有這樣乙個結論:原題等價於求最大獨立集。
證明的話可以考慮首先答案是要大於等於最大獨立集的。
然後把最大獨立集中的每乙個元素都先選中,可以考慮如果加入兩個不在最大獨立集中的元素之後不能形成團,那就說明新加的兩個元素之間沒有邊。
如果這樣的話,可以用這新加的兩個元素替換原最大獨立集中的元素,那麼最大獨立集可以擴大,就不是最大獨立集。
可以考慮把每個符卡都按照左上角的座標排序,然後最大獨立集是不難 dp 的。
轉移的條件就是兩個右端點分別小於兩個左端點。
因為上方的左端點是遞增的,可以用堆來動態插入可以進行轉移的點。
下方的偏序關係用樹狀陣列維護即可。
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...
省選模擬101 題解
a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...