HDU 2089 不要62 (數字DP)

2021-07-28 03:07:42 字數 995 閱讀 7894

人們將含有62和4的數成為不吉利的數字,大家都不喜歡不吉利的數字。

現給出兩個整數n和m,求出從n到m的數字中有多少吉利的數字(不含有62或4的數字)。

又是乙個數字dp的典型題目,與我之前寫過的(hdu 3555 bomb)相比增加了一點點的難度,判斷中需要仔細一點,思路還是相同的。

設立乙個二維陣列dp[i][j],儲存當數字為i位長的時候的情況,j=0表示不含有62且不含有4且不以2開頭的數,j=1代表不含有62且不含有4但以2開頭的數字的個數,j=2代表含有62或4的數(不吉利的數字)的個數。

dp[i][0]=9*dp[i-1][0]-dp[i-1][1];

//在i-1位數的基礎上構造i位數時,首位可以新增處4以外的數字,還要減去新增的數字6且原首位為2的情況。

dp[i][1]=dp[i-1][0];

//在原基礎上首位新增數字為2,已經包含了原來首位為2的情況,所以不需要另外考慮。

dp[i][2]=10*dp[i-1][2]+dp[i-1][1]+dp[i-1][0];

//原有的62增加任意首位+原有首位為2新增6構成62+原有任意首位新增4的情況。

#include 

#include

#include

using

namespace

std;

int dp[100][3],n,m,num[20];

void init()

}int solve(int k)

//將原來的數字分成不同的位存到陣列中

bool flag=false;

for(int i=cont;i>=1;i--) //***以上三種並不相互包含。

if(num[i]==4||(num[i+1]==6&&num[i]==2))

flag=true;

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