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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

状态压缩:枚举子集(最优组队)(ybtoj)(动态规划)

發(fā)布時(shí)間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 状态压缩:枚举子集(最优组队)(ybtoj)(动态规划) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解析

很裸的狀壓dp
但是直接暴力的話狀態(tài)2n,枚舉2n
乘在一起會(huì)T誒
怎么辦呢?
使用下面這個(gè)循環(huán),就可以保證只會(huì)枚舉當(dāng)前狀態(tài)s的子集

for(int i=(s-1)&s;i;i=(i-1)&s){........ }

證明

舉舉例子就挺明顯了
為什么不重不漏呢?
首先i肯定單調(diào)不降,所以不重是很明顯的
我們只需要證明不漏了,也就是(i-1&s,i-1]沒(méi)有s的子集
也挺明顯的
首先前提條件是i是s的子集
然后i減了1
會(huì)發(fā)生什么呢?
如果i最后一位是1減成0顯然還是子集
那么考慮退位的情況
假設(shè)退位到第k位,差不多可以寫(xiě)成:

s:…1abcd
i…10000
i-1:…01111
i-1&s:…0abcd
(這里k就等于5啦)

那就很顯然了
取&后會(huì)且只會(huì)把i-1k位之后變成與s相同
而這之間(01111與0abcd之間)很顯然沒(méi)有s的子集啦
這叫什么證明
反正說(shuō)明白了就行了awa

時(shí)間復(fù)雜度

這樣時(shí)間復(fù)雜度是多少捏?
對(duì)于一個(gè)有k個(gè)1的狀態(tài)s,顯然其子集數(shù)(也就是每個(gè)狀態(tài)s的枚舉數(shù))為:

2k

對(duì)于長(zhǎng)度為n的序列,其有k個(gè)1的狀態(tài)s的個(gè)數(shù)為:

C(k,n)

然后根據(jù)乘法原理:
總的時(shí)間復(fù)雜度應(yīng)該是:

∑C(k,n) *2k(0<=k<=n)

再加個(gè)東西:

∑C(k,n) ?*? 2k?*? 1n-k(0<=k<=n)

就變成多項(xiàng)式定理啦
所以時(shí)間復(fù)雜度就是:

(2+1)n = 3n

thanks for reading!

總結(jié)

以上是生活随笔為你收集整理的状态压缩:枚举子集(最优组队)(ybtoj)(动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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