HDU 2089 不要62 數字DP學習

2021-07-31 05:57:56 字數 1561 閱讀 9316

problem description

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

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

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

62315 73418 88914

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

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

input

輸入的都是整數對n、m(0< n≤m<1000000),如果遇到都是0的整數對,則輸入結束。

output

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

sample input

1 100

0 0

sample output

80dfs做法

#include 

using

namespace

std;

//dp[i][j] 含義,j狀態下的i位數共有幾個,j=1首位是6的合法數,j=0首位不是6的合法數

int dp[10][5],dig[10];

int dfs(int len,int s,int limit) /*limit表示乙個界限,例如對於

x=54321,現在我們要填第一位,如果填0-4那麼limit為0這時此位後面的數字可以隨

便填,但如果這一位是5,那麼後面的數字只能填0-4.同理填第二位時,如果第二位填0-3那麼可以隨便填,如果填4要注意後面的不能隨便填

*/ if (!limit) dp[len][s]=res;/*如果沒有達到極限,即這一位是隨便填的,

那麼用dp陣列存起來*/

return res;

}int slove(int x)

dfs(len,false,true);

}int main()

return

0;}

另一種做法。

#include 

using

namespace

std;

//dp[i][j]含義,i表示i位數,j表示對應狀態,dp[i][j]表示i位在j狀態下的數字個數

//j==0 所有的合法數

//j==1 首位是2的合法數

//j==2 所有的違法數

int dp[10][5];

void init ()

}int slove (int x)

; //把數x逐位分解放入arr中

while (x)

//相當於從最高位開始填數字。

//ans統計的是0-x的違法數

for (int i=len;i>=1;i--)

return sum-ans;

}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 表示不存在不吉利數字,且最...