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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客网dp专题 数位dp

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

文章目錄

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

數位dp

例題:

NC116652 uva11038 How many 0’s

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

一共是x+y+…

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

NC15035 送分了QAQ

每次給出一個區間[n,m],求包含38或者4的數字的個數
題解
dp[i][st]從高到低數第i為對應的情況為st的數字個數,
st=0表示沒有4也沒有38
st=1表示有38或者4但當前位是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 詭異數字

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

代碼:
模板

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

NC20665 7的意志

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

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

NC17385 Beautiful Numbers

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

CF55D NC108918 Beautiful numbers

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

習題:

題目地址

NC17867 明七暗七

NC19327 好朋友

NC19945 [CQOI2016]手機號碼

NC20268 [SCOI2009]WINDY數

NC20287 [SCOI2012]BLINKER的仰慕者

NC20293 [SCOI2013]數數

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

NC20491 [ZJOI2010]COUNT 數字計數

NC210885 計數問題

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。