1. 程式人生 > 其它 >NOIP模擬2021.7.31

NOIP模擬2021.7.31

1、 演出邀請

神奇的模擬題。
我們可以考慮如果我們以某種合理的方式掃一遍所有的演員組合,就可以得到答案。
只需要開一個set去維護每一個演員組有多少人就可以了。
只有一個人的時候就可以加入隊列了。

或者我們可以直接暴力加上一些優化就跑得飛快。例如不重複列舉每一組人裡面已經出現的人,不能出現新人就直接退出。隨便做都能過

2、聲音辨數

傻逼題
注意N很小,每一次直接跑完全揹包即可。只需要發現每次做揹包的音量和是小於\(10^5+100\)的就可以了。

3、Cross

又是傻逼題
直接跑分層圖最短路,注意在終點死不計入次數即可。

4、鄰面合併

典型的狀壓DP,M<=8
之前做過一個很像的題目,這個題

且M<=6,N<=100
在狀壓的時候就需要考慮用三進位制轉移來分辨兩個挨著的1是否是同一個矩陣。

這裡會發現三進位制不太行,時間和空間都會爆掉。
但是我們可以發現這兩個題是有點不同的,那一個題是每個位置都可以選,這個題是有些位置一定不能選,剩下的所有位置一定都可以選。

所以我們直接用01表示兩種矩陣,不能選的地方直接判斷就可以了。

於是我們就可以設\(f(i,state)\)表前i行,當前行的狀態是\(state\)時所需要花費的最少矩陣個數。列舉上一行的狀態然後判斷能否繼承上一行的矩陣就可以,很暴力,但是實現稍有困難。


做本題的時候犯了一個錯誤,調了很久。
在判斷一個state的某相鄰兩位是否相同的時候,不能夠直接判斷 \(s&(1<<i)==s&(1<<j)\)

,最後結果可以是10000和1000,其中某一邊的結果還要左移或者右移一位。
因為這個東西調了好久。

5、總結:

全是比較裸的SB題,T3因為沒開long long爆了好多分,差點就AK了。。。
下次不開long long一定見祖宗