數字dp例題

2021-09-21 06:54:21 字數 2018 閱讀 4560

在了解數字dp之前,先來看乙個問題:

求a~b中不包含49的數的個數. 0 < a、b < 2*10^9;

注意到n的資料範圍非常大,暴力求解是不可能的,考慮dp,如果直接記錄下數字,陣列會開不起,該怎麼辦呢?要用到數字dp.

數字dp一般應用於:求出在給定區間[a,b]內,符合條件p(i)的數i的個數. 條件p(i)一般與數的大小無關,而與數的組成有關.

這樣,我們就要考慮一些特殊的記錄方法來做這道題.一般來說,要儲存給定數的每個位置的數.然後要記錄的狀態為當前運算元的位數,剩下的就是根據題目的需要來記錄.可以發現,數字dp的題做法一般都差不多,只是定義狀態的不同罷了.

總結:1.如果題目**現求滿足區間[l,r]的符合......性質的數的個數,考慮使用數字dp.

2.思考一下:如果我們只能從前往後一位位列舉當前的數字,要做出這道題,我們需要知道哪些量?利用這些來補充到dfs的呼叫引數中.

3.套用模板.

題意:給個區間l,r求區間內沒有62,並且沒有4的數的個數

思路:數字dp模板題目,dp[i][0]表示長度為i,且第i+1位不為6的所有符合條件的數 ,dp[i][1]表示長度為i,且第i+1位為6的所有符合條件的數,

題意:給乙個數n,求前n個數 有多少個數 那個數%13==0 且那個數包括子串13

思路:dp[i][j][0]表示長度為i,第i位前面的數字和取模13為j,且 第i位前面的數字不含13

dp[i][j][1]表示長度為i,第i位前面的數字和取模13為j,且 (長度為i+1那位)第i+1位為1 

dp[i][j][0]表示長度為i,第i位前面的數字和取模13為j,且 第i位前面的數字不含13

當p等於0時  只有mod==0&&sta==2才可以返回1,長度為p的某種狀態只要加上所有長度為p-1的所有狀態,就是長度為p的狀態的數量;

題意:給l,r,求區間l,r中的數,二進位制表示時0的個數大於等於1的個數

思路:dp[i][j]表示長度為i(二進位制表示的),第i位前面的數字0的數量-數字1的數量為j;但是如果有前導0的話,長度變化時dfs的狀態是一樣的,所以除了limit標誌以為再加乙個前導0標誌,然後分情況進行狀態轉移;

題意:定義f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+…a(2)*2+a(1)*1,a(i)表示十進位制數x中第i位的數字。 

題目給出a,b,求出0~b有多少個不大於f(a)的數。

思路:看到這個題目,馬上想到的思路就是dp[i][j]表示長度為i,第i位前面的權值和為j的合法方法數,當p==0時,權值小於f(a)時返回1,但是,f(a)每次都在變,也就是說dp陣列每輸入乙個a,b就要初始化,memset超時,這樣就想到優化,優化成只要初始化一次dp陣列,優化的思路就是當p==0時返回1的條件不能與f(a)有關,這樣可以設計dp陣列dp[i][j]表示長度為i,第i位前面的權值和小於等於j的符合條件的數的數量,遞迴的時候求小於等於f(a)的數量,當p等於0時,判斷遞迴的權值是否大於等於0即可;

題意:求區間內平衡數的個數,  平衡數定義為 乙個數以某乙個數字為支點,左邊數字上的數*到支點距離等於右邊數字上的數*到支點的距離 比如  3218就是乙個以1為支點的平衡數  2*1+3*2==8*1

思路:這個題目和上面所有題目不同的地方就是要列舉支點,dp[p][pos][sum] 表示長度為p,以pos為支點,第p為前面的權值和為sum(sum是以pos為支點,數字*距離的和),狀態轉移就是 dp[p][pos][sum]+=dp[p-1][pos][sum+(p-pos)]最後如果p==0時sum==0就返回1  注意最後還要減去0的個數,因為0不管是以哪一位做支點都重複算了一次,其他數顯然不可能重複計算;

題意:平衡數定義:乙個數的數字出現過的數字,如果是偶數,總出現次數要是奇數次,如果是奇數,出現的次數要是偶數次,注意,不要看成所有奇數出現次數為偶數,所有偶數出現次數為奇數,

思路:dp[i][1<<10][1<<10]  狀壓一下,兩個狀態,第乙個狀態i位上表示第i個數出現的次數是奇數次1,還是偶數次0,第二個狀態i位上表示的是i這個數字有沒有出現過,出現1,沒出現0,然後注意一下前導0就ok了。特別注意一些為運算的優先順序呀!

數字dp例題(不要62)

杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73418 88914 都屬...

數字dp例題模板題(後續更新)

描述 數字dp的問題題型一般是給定乙個閉區間 l,r 求這個區間中滿足 某種條件 的數的個數的總數 對於這類問題,我們首先統計 l,r 範圍的滿足條件的數字轉化成統計 1,n 內滿足條件的數字的數量 那麼ans l,r ans 1,r ans 1,l 1 這樣接下來討論問題我們只需要考慮上邊界即可 ...

黑書DP例題

page section no title submit 113 1.5.1 例題1 括號序列 poj1141 116 1.5.1 例題2 棋盤分割 poj1191 117 1.5.1 例題3 決鬥 sicily1822 117 1.5.1 例題4 舞蹈家 懷特先生 acm icpc live ar...