CF662C Binary Table
生活随笔
收集整理的這篇文章主要介紹了
CF662C Binary Table
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
有一個\(n\)行\(m\)列的表格,每個元素都是\(0/1\),每次操作可以選擇一行或一列,把\(0/1\)翻轉,即把\(0\)換為\(1\),把\(1\)換為\(0\)。請問經過若干次操作后,表格中最少有多少個\(1\)。
題解
但凡跟狀態轉移扯上一點關系的題目就沒我什么事了……
首先,我們可以枚舉每一行是否反轉,然后每一次就可以\(O(m)\)的計算出答案,然而這樣的復雜度是\(O(2^nm)\)的,會掛
我們設\(a[S]\)表示狀態為\(S\)的列有多少個,\(b[S]\)表示狀態\(S\)中\(0\)和\(1\)的個數中較小的那一個,設當前的行狀態為\(now\),可以有如下轉移\[ans=\sum_{i=0}^{2^n}a[i]\times b[i⊕now]\]
因為有\(i⊕i⊕now=now\),所以轉移可以寫成如下形式\[ans[now]=\sum_{i⊕j=now}a[j]*b[j]\]
用\(FWT\)優化即可,復雜度為\(O(2^n\log(2^n))=O(n*2^n)\)
轉載于:https://www.cnblogs.com/bztMinamoto/p/10198577.html
總結
以上是生活随笔為你收集整理的CF662C Binary Table的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫-抓取网页内容
- 下一篇: Django中用Jquery实现不刷新页