hdu 2089 不要62 數字dp

2021-08-15 04:07:44 字數 1156 閱讀 4524

emm看了好久才明白qaq明白了發現這個好簡單啊

orz感謝大佬們的部落格

做出來了題還是超級開心的2333

幾個誤區

誤區1。這個題的思路solve解決的是小於這個數的比如solve(m)處理的實際上是0 m-1

所以一定是

solve

(m+1)-solve

(n);

不然的話就會把0算進去【當然如果n不是1的話算進去的是別的】

比如1 12345

如果你算了0 12344 結果就會多一 因為0是符合的但是12345不符合

但是樣例的1 100

因為0和100都符合結果顯示出來的是對的。注意一下

誤區2

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

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

break;

在**的主體部分裡面j的運算。是不帶等號的。

dp[i][j]的含義,指的是長度為i的第i位是j

這裡面如果說四位

0000是四位數

然後到了後面的dp[3][x]就是預設了第四位指的是digit[4],也因此在之前的列舉裡面不用帶上對digit[i]

同樣的因為這個原因、一旦發現了不符合的直接break跳出了整個的迴圈。

這類的比如不小於1234的在列舉到dp[2][j]的時候出來的一定是12xx

而dp[4]的時候有0000在你的dp裡是四位數,然後在結果裡是去掉前導零的

也因此,如果有的題把0000和000以及00看成不同數的話這個還需要修改

#include

#include

int dp[15][15];

void prepare()}}

}int solve(int n)

digit[len+1]=0;

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

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

break;

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