星空 差分,狀壓dp

2022-02-18 16:14:48 字數 2274 閱讀 8484

總算不再是能用暴力卡常/隨機化水過的好t3了。

說是打了兩個標籤,實際上最關鍵的是題意轉化。

如果你絲毫不轉化的話也可以:

1 #include2

using

namespace

std;

3int dp[2][1048577],b[65],k,n,m,x[9],f=1

,mx;

4int

main()

15 printf("

%d\n

",dp[n&1][0]);return0;

16}17if(!k)

18int bj=0;19

for(int i=1;iif(x[i]+1!=x[i+1])bj=1;20

if(!bj)for(int j=1;j<=m;++j)if(b[j]==k)

21 srand(time(0)+clock());printf("

%d\n

",2+rand()%2

);22 }

考場上56分,直接狀壓最大的操作區間,再加騙分

(本來想上去講講的畢竟勉強算是個單題最高分但其實很水)

然而自然騙分並不穩定。考後再測:

考場上rp生效了!

這個暴力可以稍微講一講:

我們先觀察資料範圍可以發現k超級小但那是全部測試點是正解的事與我無瓜並不會用

其次m也不大但理由同上。

但是那個bi在某些測試點裡小,也有些特別大。

和《奇怪的道路》有點莫名其妙的像?狀壓它!

只不過是把單點的操作換成了區間,其餘真的沒有什麼區別。

時間複雜度o(nm2max(bi))。我不像題解一樣只壓了4而是嘗試壓了一下16。t了不要想了。

考場上還剩那麼幾分鐘,幹啥?騙分啊!

答案小於4。挺好。只有0123。

0好說啊,所有燈都亮著就是0啊。

1也好說啊,沒亮的燈連成一片了而且操作裡有能剛好這麼長的就是1啊。

2得搜尋吧,懶得打。rand一下。

效果不錯。

好了好了廢話太多說正解。

首先我們的操作是一次乙個區間,暴力掃肯定t。區間異或怎麼搞?

其實異或運算和加法在很多方面上有互通之處,如果是加法,你會怎麼做?

差分啊!然後你就可以驚奇地發現異或的確也可以差分。

那麼剛開始對於乙個全亮的串,幾個不亮的燈就是單點異或。也放進差分陣列裡處理。

每乙個操作就是對於l~r區間異或。其實就是對於相隔距離一定的兩個點同時異或一下。

我們的最終目標是得到乙個全0串,差分陣列全0就表示原區間全0,也就是燈都亮了。

我們繼續考慮每一步操作,每次異或兩個位置,如果它們都是0你異或完就都是1,和要消除1的目標不符且並不會i作出正貢獻。

所以你只會同時選兩個1或乙個1乙個0。前者會使兩個1都消失。後者會讓兩者交換位置。

那麼既然你想讓它們都消失,就是不斷改變1的位置最後讓它們兩兩撞在一起消失掉。

而它每次會移動多少,就是向左右移動它給定的bi位啊。

跑bfs,找出所有1的單源最短路。(不建議打dijkstra或spfa,常數大,而且就是說明你不理解這個bfs)

因為這個bfs每次走都是一次操作,相當於邊權是1,佇列裡自帶單調遞增。

不要把邊建出來,某牛t了。

然後我們就找出了每一對數字1對撞需要幾次操作。

接下來狀壓它,不斷列舉你要讓哪兩個1對消更新狀態即可。

1 #include2

using

namespace

std;

3int n,m,k,b[65],x[17],y[9],cnt,dt[40005],cost[17][17],q[40005],t,dp[1048577];4

int main()

12 memset(cost,0x3f,sizeof

cost);

13for(int i=1;i<=cnt;++i)

19for(int j=i+1;j<=cnt;++j)cost[i][j]=cost[j][i]=dt[x[j]];20}

21 memset(dp,0x3f,sizeof dp);dp[0]=0;22

for(int s=0;s<1

<1

))27 printf("

%d\n

",dp[(1

<1

]);28 }

沒上kb。1008b

題解 星空 狀壓DP

這道題思維難度非常高,有很多處理的小技巧,並且 也有很多細節 這道題是一種序列的區間操作,我們都知道,區間操作比較麻煩,所以我們要想辦法將區間操作轉換成單點修改 這時,我們想到了差分,假如我們對乙個序列進行操作,這時乙個序列裡的相對狀態不會變只有兩端改變,換句話說就是這個序列的差分並不會發生改變,只...

模擬8 11 星空(差分轉化,狀壓DP,最短路)

一道很好的題,綜合很多知識點。首先複習差分 將原來的每個點a i 轉化為b i a i a i 1 如果是求和形式就是b i a i 1 a i 我們發現這樣的方便在於我們可以運用字首和的形式,求出單點值,當然,差分一般支援區間修改 單點查詢,同時我們發現異或也滿足轉化的性質,我們發現異或的區間修改...

狀壓dp 玉公尺田 狀壓dp

相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...