日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NowCoder110E Pocky游戏 状压DP

發(fā)布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NowCoder110E Pocky游戏 状压DP 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳送門

題意:給出$N$個數(shù)和一個長為$M$、所有數(shù)在$[1,N]$范圍之內(nèi)的正整數(shù)序列$a_i$,求出這$N$個數(shù)的一種排列$p_1...p_N$使得$\sum\limits_{i=2}^M |p_{a_i}-p_{a_{i-1}}|$最小。$N \leq 20,M \leq 1000$


?$N \leq 20$給了我們很明顯的狀壓DP的信息,但是DP方程的思維難度還是有點大。

我們考慮按照數(shù)字從小到大地指定它在$p_i$中的位置。這樣我們可以通過預處理某一個位置在$a_i$中相鄰位置的數(shù)字的情況得到這一個數(shù)的貢獻(也就是可以直接把絕對值符號拆開來計算它的貢獻),這樣子轉(zhuǎn)移就會方便很多了。

設(shè)$f_i$表示已經(jīng)指定了數(shù)字的序列$p$中的元素集合為$i$(eg.$i=10101$就表示指定了$p_1,p_3,p_5$,而$i=01011$表示指定了$p_1,p_2,p_4$),且對應的數(shù)為$N$個數(shù)中最小的若干個時,最小的難度值為多少。我們可以預處理$g_{i,j}$表示在序列$a$中與$i$相鄰的且在集合$j$中的數(shù)的出現(xiàn)次數(shù)的總和(eg.如果有某一對相鄰的數(shù)對為$2,3$,那么$g_{2,2^3}++,g_{3,2^2}++$),這樣我們轉(zhuǎn)移的時候只需要取$g_{k,i}-g_{k,2^N - 1 \, xor \, i}$就可以得到這一個數(shù)的貢獻(也就是拆了絕對值之后的系數(shù))。然后枚舉轉(zhuǎn)移點轉(zhuǎn)移即可。

看到絕對值就要考慮一下從小到大然后拆掉絕對值符號算貢獻呢qwq

1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int now[21] , dp[1 << 21] , cnt[21][1 << 21] , cnt1[1 << 21] , N , M; 5 6 inline int lowbit(int x){ 7 return x & -x; 8 } 9 10 int main(){ 11 cin >> N >> M; 12 for(int i = 0 ; i < N ; i++) 13 cin >> now[i]; 14 int last = -1; 15 while(M--){ 16 int x; 17 cin >> x; 18 x--; 19 if(last != -1){ 20 cnt[last][1 << x]++; 21 cnt[x][1 << last]++; 22 } 23 last = x; 24 } 25 memset(dp , 0x3f , sizeof(dp)); 26 dp[0] = 0; 27 sort(now , now + N); 28 for(int i = 1 ; i < 1 << N ; i++) 29 for(int j = 0 ; j < N ; j++) 30 cnt[j][i] = cnt[j][i - lowbit(i)] + cnt[j][lowbit(i)]; 31 for(int i = 1 ; i < 1 << N ; i++){ 32 cnt1[i] = cnt1[i - lowbit(i)] + 1; 33 for(int j = 0 ; j < N ; j++) 34 if(i & (1 << j)) 35 dp[i] = min(dp[i] , dp[i ^ (1 << j)] + (cnt[j][i] - cnt[j][(1 << N) - 1 - i]) * now[cnt1[i] - 1]); 36 } 37 cout << dp[(1 << N) - 1]; 38 return 0; 39 }

轉(zhuǎn)載于:https://www.cnblogs.com/Itst/p/9833372.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的NowCoder110E Pocky游戏 状压DP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。