hdu 2089 不要62(數字)

2021-08-08 16:13:29 字數 1568 閱讀 9606

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 0sample output

80分析:

數字dp

這樣我想起了。。算了別亂想了,反正也沒什麼用

f[i][j][k][0/1][0/1]

//第i位,填的數字是j,前一位數字是k,有沒有4,是否卡上界

f[i+1][c][j][0/1][0/1]+=f[i][j][k][0/1[0/1]

(具體是0還是1需要判斷)

在把數字轉到陣列裡的時候

注意順序:1位存數字的最高位

感冒了,狀態不好。。。

迴圈f[i][j][k][l][s]的時候不要管這五個變數是不是合法

因為不合法狀態f值一定是0,這是沒有影響的

但是目標狀態一定要判斷

這裡寫**片

#include

#include

#include

using namespace std;

int f[10][11][11][2][2];

int a[10],b[10],tt1,tt2,c[10];

int doit(int

*a,int ll)

int ans=0;

for (i=0;i<=9;i++)

for (j=0;j<=9;j++)

for (k=0;k<=1;k++)

ans+=f[ll][i][j][0][k];

return ans;

}int main()

for (int i=1;i<=tt1;i++) a[i]=c[tt1-i+1];

while (y)

for (int i=1;i<=tt2;i++) b[i]=c[tt2-i+1];

if (ff==1) printf("%d\n",doit(b,tt2)-1); //

0是檢驗不出來的,所以這裡減去乙個多餘的0

else

printf("%d\n",doit(b,tt2)-doit(a,tt1));

scanf("%d

%d",&x,&y);

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