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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客网dp专题 数位dp

發(fā)布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网dp专题 数位dp 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 數(shù)位dp
  • 例題:
    • NC116652 uva11038 How many 0's
    • NC15035 送分了QAQ
    • NC20669 詭異數(shù)字
    • NC20665 7的意志
    • NC17385 Beautiful Numbers
    • CF55D NC108918 Beautiful numbers
  • 習(xí)題:
    • NC17867 明七暗七
    • NC19327 好朋友
    • NC19945 [CQOI2016]手機(jī)號碼
    • NC20268 [SCOI2009]WINDY數(shù)
    • NC20287 [SCOI2012]BLINKER的仰慕者
    • NC20293 [SCOI2013]數(shù)數(shù)
    • NC20298 [SCOI2014]方伯伯的商場之旅
    • NC20491 [ZJOI2010]COUNT 數(shù)字計數(shù)
    • NC210885 計數(shù)問題

數(shù)位dp

例題:

NC116652 uva11038 How many 0’s

題目:輸入a和b,求a到b的所有數(shù)之中有多少0出現(xiàn)
題解
先算個位,個位是0的情況有x種
再算十位,十位是0的情況有y種

一共是x+y+…

用數(shù)位dp做
dp[i]中存的是從0~99…9(共i個9)中0的個數(shù)(不含前導(dǎo)0)
dp0[i]中存放的是00…0~99…9(共i個0,i個9)中0的個數(shù)(含前導(dǎo)0)
dp0[i]=dp0[i-1] * 10+power * (10,i-1)
dp[i]=dp[i-1]+dp0[i-1]*9

NC15035 送分了QAQ

每次給出一個區(qū)間[n,m],求包含38或者4的數(shù)字的個數(shù)
題解
dp[i][st]從高到低數(shù)第i為對應(yīng)的情況為st的數(shù)字個數(shù),
st=0表示沒有4也沒有38
st=1表示有38或者4但當(dāng)前位是3
dt=2表示有4或者38
dp[i][0]=9*dp[i-1][0]-dp[i-1][1]
dp[i][1]=dp[i-1][0]
dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0]
邊界:dp[0][0]=1

NC20669 詭異數(shù)字

題目:
一個區(qū)間[l,r]和多個約束,約束為數(shù)字x在數(shù)字串中連續(xù)出現(xiàn)的次數(shù)不能大于len,求出這個區(qū)間內(nèi)滿足這些約束的數(shù)字個數(shù)(不含前導(dǎo)0)x為0~9
題解:
dp[i][x][cnt]表示從高往低第i位的數(shù)字是x,且x已經(jīng)連續(xù)出現(xiàn)了cnt次的合法數(shù)字個數(shù)

代碼:
模板

int dp(int pos,int x,int num,bool flag) {//num當(dāng)前這位是什么 if(pos==0)return 1;//if(flag&&f[pos][x][num]!=-1)return f[pos][x][num];//已經(jīng)算好的直接返回 int maxi=flag?9:a[pos];//當(dāng)然能枚舉的最多數(shù) int ans=0;for(int i=0;i<maxi;i++){if(i==x)//如果相等 {if(num+1>limit[i])continue;//判斷是否數(shù)字非法 ans=(ans+dp(pos-1,x,num+1,flag||i<maxi))%mod;//如果合法,加上繼續(xù)向后dp }else ans=(ans+dp(pos-1,i,1,flag||i<maxi))%mod;//如果不相等,新的數(shù)(即不連續(xù)) } if(flag)f[pos][x][num]=ans;//更新f return ans;}

NC20665 7的意志

題目:
定義一個序列:7,77,777,7777…7777777…
如果一個整數(shù)能被序列a中的任意一個數(shù)字整除,并且其數(shù)位之和為序列a中任意一個數(shù)字的倍數(shù),那么這個數(shù)字就含有7的意志,給定范圍[n,m]問有多少數(shù)有7的意志
1<n<m<1e18
題解:
%7,%77…=0,所以只用%7即可
dp[pos][pre][sum] 前pos位的數(shù)的和%7的余數(shù)為pre,數(shù)位和%7為sum的個數(shù)

for(i=0-->maxi)ans+=dp(i-1.(pre*10+i)%7,(sum+i%7),flag)

NC17385 Beautiful Numbers

F(x)為x各個位數(shù)的和
求x%F(x)==0的數(shù)的個數(shù)(最多12位)
題解:
dp[pos][x][mod][sum]表示前pos位數(shù)除以x的余數(shù)為mod,且前pos位的和為sum的數(shù)字個數(shù)
x從0~12*9枚舉

CF55D NC108918 Beautiful numbers

區(qū)間[l,r]中有多少數(shù)能夠整除他自身各位數(shù),也就等價于在區(qū)間[l,r]中有多少數(shù)能夠整除他自身各位數(shù)的最小公倍數(shù)

習(xí)題:

題目地址

NC17867 明七暗七

NC19327 好朋友

NC19945 [CQOI2016]手機(jī)號碼

NC20268 [SCOI2009]WINDY數(shù)

NC20287 [SCOI2012]BLINKER的仰慕者

NC20293 [SCOI2013]數(shù)數(shù)

NC20298 [SCOI2014]方伯伯的商場之旅

NC20491 [ZJOI2010]COUNT 數(shù)字計數(shù)

NC210885 計數(shù)問題

總結(jié)

以上是生活随笔為你收集整理的牛客网dp专题 数位dp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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