HDU 2089 不要62 數字dp

2021-09-08 21:10:56 字數 1189 閱讀 1099

杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。 

杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。 

不吉利的數字為所有含有4或62的號碼。例如: 

62315 73418 88914 

都屬於不吉利號碼。但是,61152雖然含有6和2,但不是62連號,所以不屬於不吉利數字之列。 

你的任務是,對於每次給出的乙個牌照區間號,推斷出交管局今次又要實際上給多少輛新的士車上牌照了。 

input

輸入的都是整數對n、m(0output

對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。 

sample input

1 100

0 0

sample output

80
數字dp問題一般是給定了乙個區間[a,b],符合題目給定的條件的數有多少。條件一般和數的各數字的組成有關。

題目就是讓我們計算區間 [n,m] 內  不含4且不含62的數的個數  ,經典的數字dp題目。

數字dp就是記憶化+dfs    把子問題的答案記錄下來,就可以在再次遇到這個子問題時,直接返回記錄的答案,可以降低執行的時間。   例如本題,  在兩位數中,十位為1 時   10 11 12  13 15 16 17 18 19   符合條件的數有9個,當十位為 0,1,2,3,5,7,8,9情況相同個數都是9  所以可以記錄  dp[len=2] [第len位的數不為6] = 9   (不考慮4,因為數中存在4不符合條件)

dp[ i ] [ j ]     i為數的長度,j 為0或1  ,0 表示 前一位不是6,,1表示前一位是6   

**:

#include#include#includeusing namespace std;

int d[20],dp[20][2];

int dfs(int len,int if6,int lim)

if(!lim) dp[len][if6]=cnt;

return cnt;

}int solve(int n)

return dfs(len,0,1);

}int main()

return 0;

}

HDU2089 不要62 數字DP

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

Hdu2089 不要62 數字dp

include includeint dp 10 3 dp i 0 為位數小於等於i且不含62也不含4的數字的個數 dp i 1 為位數為i且首位為2且不含62也不含4的數字的個數 dp i 2 為位數小於等於i且含62或4的數字的個數 int digit 10 void er int wei in...

hdu 2089 不要62 (數字dp)

思路 用變數記錄吉利數,和最高位為2的吉利數還有不是吉利數的個數。code include include includeusing namespace std int dp 10 3 dp i j i表示位數,j表示狀態 dp i 0 表示不存在不吉利數字 dp i 1 表示不存在不吉利數字,且最...