洛谷 P3943 星空

2022-06-01 09:03:16 字數 930 閱讀 3183

有乙個長度為n的01序列,有k個1

每次可以將給定長度的子串取反,即0->1, 1->0

求最少幾次可以將整個序列都變為0

差分+狀壓dp

首先將原序列異或差分

每消去一對1就是將1移到一起

先用bfs預處理出每兩個1移到一起的最小步數

然後用狀壓dp來求總的最小步數

#include #include const int inf = 0x3f3f3f3f;

int n, k, m, x, xx, cnt, c, x;

int b[50000], c[50000], s[50000];

int dis[100][100], dp[1000000];

bool a[50000], dft[50000], used[50000];

std::queue < int > q;

inline void _min(int& x, const int y)

int main()

for (register int i = 1; i <= m; ++i) scanf("%d", &b[i]);

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

xx = x - b[j];

if (xx > 0 && !used[xx])

}} for (register int j = 1; j <= cnt; ++j) dis[i][j] = s[c[j]];

} c = 1 << cnt;

for (register int i = 1; i < c; ++i) dp[i] = inf;

for (register int i = 0; i < c; ++i)

printf("%d\n", dp[c - 1]);

}

洛谷P3943 星空

洛谷p3943 星空 命運偷走如果只留下結果,時間偷走初衷只留下了苦衷。你來過,然後你走後,只留下星空。逃不掉的那一天還是來了,小 f 看著夜空發呆。天上空蕩蕩的,沒有一顆星星 大概是因為天上吹不散的烏雲吧。心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。小 c 拿來了一長串星型小燈泡...

洛谷 P3943 星空

命運偷走如果只留下結果,時間偷走初衷只留下了苦衷。你來過,然後你走後,只留下星空。逃不掉的那一天還是來了,小 f 看著夜空發呆。天上空蕩蕩的,沒有一顆星星 大概是因為天上吹不散的烏雲吧。心裡吹不散的烏雲,就讓它在那裡吧,反正也沒有機會去改變什麼了。小 c 拿來了一長串星型小燈泡,假裝是星星,遞給小 ...

洛谷P3943 星空 題解

一道很好的鍛鍊思維難度的題,如果您能在考場上直接想出來的話,提高組450分以上就沒問題了吧。別像作者一樣看了好幾篇題解才勉強會 先提取出題目大意 給定乙個長度n 40000的01串,其中1的個數 8,有m種操作,每次操作都是把乙個該操作對應長度的區間取反,或者說異或上1,求使整個串變為只有0的串的最...