牛客網dp專題 數字dp

2022-05-05 12:48:06 字數 1678 閱讀 2466

題目:輸入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

每次給出乙個區間[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

題目:乙個區間[l,r]和多個約束,約束為數字x在數字串中連續出現的次數不能大於len,求出這個區間內滿足這些約束的數字個數(不含前導0)x為0~9

題解:dp[i][x][cnt]表示從高往低第i位的數字是x,且x已經連續出現了cnt次的合法數字個數

**:模板

intdp(

int pos,

int x,

int num,bool flag)

else ans=

(ans+

dp(pos-

1,i,

1,flag||i

)%mod;

//如果不相等,新的數(即不連續) }if

(flag)f[pos]

[x][num]

=ans;

//更新f

return ans;

}

題目:

定義乙個序列:7,77,777,7777…7777777…

如果乙個整數能被序列a中的任意乙個數字整除,並且其數字之和為序列a中任意乙個數字的倍數,那麼這個數字就含有7的意志,給定範圍[n,m]問有多少數有7的意志

1for

(i=0

-->maxi)

ans+=dp

(i-1.

(pre*

10+i)%7

,(sum+i%7)

,flag)f(x)為x各個位數的和

求x%f(x)==0的數的個數(最多12位)

題解:dp[pos][x][mod][sum]表示前pos位數除以x的餘數為mod,且前pos位的和為sum的數字個數

x從0~12*9列舉

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

牛客網 ABBA 線性DP

bobo有乙個長度為2 n m 的字串,由字元 a 和 b 組成。該字串還具有迷人的特性 它可以被分解為長度為2的 n m 子串行,並且在 n m 個子序列中,它們中的n為 ab 而其他m為 ba 給定n和m,找出模數可能的字串數。思路 dpi j 表示用了i個ab,j個ba的方案數,我們考慮當前狀...

數字DP專題

hdu 2089 不要62 hdu 3555不能出現連續的49 uestc 1307相鄰的數差大於等於2 hdu 3652 出現13,而且能被13整除。hdu 3709平衡數 light oj 1140兩個數之間的所有數中零的個數。lightoj 1032 二進位制數中連續兩個 1 出現次數的和 c...

牛客網 G 送分了 QAQ 數字 dp入門

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 杭州人稱傻乎乎的人為62,而嘟嘟家這裡沒有這樣的習俗。相比62,他那裡的人更加討厭數字38,當然啦,還有4這個 數字!所以啊,嘟嘟不點都不想見到包含38或者4的數字。每...