總算不再是能用暴力卡常/隨機化水過的好t3了。
說是打了兩個標籤,實際上最關鍵的是題意轉化。
如果你絲毫不轉化的話也可以:
1 #include2考場上56分,直接狀壓最大的操作區間,再加騙分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 }
(本來想上去講講的畢竟勉強算是個單題最高分但其實很水)
然而自然騙分並不穩定。考後再測:
考場上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沒上kb。1008busing
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 }
題解 星空 狀壓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 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...