題目:輸入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的數字。每...