HDU2089 不要62 數字DP

2021-07-04 19:43:44 字數 925 閱讀 4951

傳送門

數字dp的入門題,看了半天才看懂。。。

題解:這裡再解釋一下,dp[i][j]表示第i位數為j的方案,很好想到dp[i][j] = sum(dp[i-1][k])其中j,k≠4,j≠6且k不同時等於2。在求區間[l,r]的時候,可以用區間[1,r]-[1,l-1]。因此,我們可以把dp先預處理出來,這樣大大地節約了時間。

自認為這道題還有乙個比較抽象的地方,就是在求比某個數小的所有滿足題意的時候。具體看我的**。

#include#includeusing namespace std;

int dp[10][10];

int digit[10],len;

void init()//預處理

} }}void get(int n)

}int cal(int n)

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

/*為什麼這裡可以break,我們來看一看這個狀態下答案的值是如何求出來的

例如某個數num = 54361,得到的答案是f[5][3] + f[5][2] + f[5][1] + f[5][0] + f[4][3] + f[4][2] + f[4][1] + f[4][0]

(沒有加f[5][4]的原因是數字中不能有4,f[5][4]的值為0,所以沒有加)

f[5][j]的數已經包含了所有的以3,2,1開頭的5位數和所有的4位數,

而以5開頭的5位數是由f[4][j]相加得到的,而f[5][5]包含的數已經大於了原來的數,因此f[4][j]的實際含義就是第5位為5,第4位為j的情況

(開始我就是以為f[5][j]已經包括了所有f[4][k])

*/ }

return res;

}int main()

}

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