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

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

生活随笔

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

编程问答

对数位dp的一些拙见

發(fā)布時(shí)間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对数位dp的一些拙见 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這不是一篇介紹數(shù)位dpdpdp的文章,只是我思考后的一些記錄,怕以后就忘記了。
由于博主太菜不會(huì)組合數(shù)學(xué),以下數(shù)位dpdpdp均采用記憶化搜索的方式。
首先最重要的就是狀態(tài)設(shè)計(jì)了,正常來(lái)說(shuō)數(shù)位dpdpdp的狀態(tài)設(shè)計(jì)需要包含數(shù)的結(jié)構(gòu)和狀態(tài)。
數(shù)位dpdpdp復(fù)雜度可以簡(jiǎn)單理解為開(kāi)的數(shù)組的大小。
對(duì)于數(shù)位dpdpdp有兩種理解:
第一種: dpdpdp的狀態(tài)只與當(dāng)前數(shù)的位數(shù)以及要維護(hù)的狀態(tài)有關(guān)。在這種理解方式下,dpdpdp狀態(tài)設(shè)計(jì)通常為f[pos][state]f[pos][state]f[pos][state],由于狀態(tài)中并未規(guī)定上下界,所以對(duì)于每次查詢操作,并不需要將其dpdpdp數(shù)組清成?1-1?1,這樣在應(yīng)對(duì)多組查詢的時(shí)候可能會(huì)快一點(diǎn)。在記憶化的時(shí)候需要加上flag1...flag1...flag1...等限制上界的變量是否為111,即當(dāng)前位是否可以選任意數(shù),在多組測(cè)試情況下這個(gè)方法跑的還可以。當(dāng)然這個(gè)只跑的快只能在維護(hù)一個(gè)數(shù)的時(shí)候跑的快,如果你要維護(hù)一對(duì)數(shù),那么記憶化的時(shí)候flag1&&flag2flag1 \And\And flag2flag1&&flag2才能記憶化,這樣的話就會(huì)慢很多,導(dǎo)致TLETLETLE,所以當(dāng)維護(hù)兩個(gè)數(shù)及以上的時(shí)候最好不要用這種記憶化方式。
寫(xiě)成的代碼大概是這樣的:

if(f[pos][state]!=-1&&flag) return f[pos][state]; if(flag) f[pos][state]=ans; return ans;

第二種: 在狀態(tài)中加入0/10/10/1表示是否達(dá)到上界,即上文中的flag1,flag2...flag1,flag2...flag1,flag2...,這樣的話由于每次詢問(wèn)的數(shù)都不同,所以每次都需要將fff數(shù)組置為?1-1?1才能記憶化,這樣的優(yōu)點(diǎn)和缺點(diǎn)相比于上面的方式很明顯,優(yōu)點(diǎn)就是這個(gè)狀態(tài)設(shè)計(jì)能記錄f[pos][state][0]f[pos][state][0]f[pos][state][0]的信息,即如果當(dāng)前位不能自由選也可以記憶化,而上面的只能記錄下來(lái)f[pos][state][1]f[pos][state][1]f[pos][state][1]的信息,只不過(guò)我們將最后一維省略了。缺點(diǎn)也比較明顯,每次都需要初始化fff數(shù)組,讓后重新dpdpdp一次,不過(guò)也不會(huì)太慢。
寫(xiě)成代碼大概是這樣的:

if(f[pos][state][flag]!=-1) return f[pos][state][flag]; return f[pos][state]=ans;

對(duì)于前導(dǎo)零:
當(dāng)涉及到對(duì)數(shù)的結(jié)構(gòu)特點(diǎn)進(jìn)行維護(hù)的時(shí)候就有可能需要維護(hù)一個(gè)前導(dǎo)零了。比如說(shuō)求[l,r][l,r][l,r]內(nèi)有多少個(gè)數(shù)的位數(shù)中含kkk個(gè)000,這個(gè)時(shí)候如果不維護(hù)一個(gè)前導(dǎo)零的話會(huì)將如001000100010中前面兩個(gè)000也算入答案,這顯然是不正確的。

數(shù)位dpdpdp很多題目求貢獻(xiàn)的話都是按位或者按照數(shù)來(lái)求的。

做過(guò)的例題:
2020 ICPC 上海 Sum of Log 數(shù)位dp + 優(yōu)化狀態(tài)
hdu 6899 Xor 數(shù)位dp
FZU - 2042 The Mad Mathematician 數(shù)位dp + 算貢獻(xiàn)

暫時(shí)先更這些,后面有更好的理解會(huì)補(bǔ)充。

總結(jié)

以上是生活随笔為你收集整理的对数位dp的一些拙见的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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