hdu 2089 不要62, 動態規劃

2021-09-17 01:40:31 字數 1372 閱讀 5196

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

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

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

62315 73418 88914

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

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

輸入的都是整數對n、m(0對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。

1 100

0 0dp[i][j]陣列中儲存的值是長度為i的以j開頭的數字中有乙個是符合要求的。然後可以根據下方的資料找出狀態轉移方程式

1    1    1    1    0    1    1    1    1    1

9    9    9    9    0    9    8    9    9    9

80    80    80    80    0    80    71    80    80    80

711    711    711    711    0    711    631    711    711    711

可以找出來dp[i][j]=sum(dp[i-1][j]) j = 6或j = 4 時另算;

j = 6 時加上上一層中除了j = 2 的值,j = 4 時 dp[i][j] = 0;

這樣就能成功推出dp陣列。

主要的解題函式是solve函式,利用solve函式可以求出solve(k)中小於k並且滿足要求的數一共有幾個。因此我們要做好準備,先求出k的位數,以及每位上的數字是什麼。然後根據每位上的數字去求出滿足要求的解有幾個。可知的是,若當前位置上的數字是x,那麼當前位數下開頭數字小於x的數都是滿足的,那麼就加上他們,除非前一位是6,且這一位是2,那麼就是不滿足的。然後當x=4或者x=2但前一位為6時,可知後面的解都是不滿足的,那麼就可以跳出迴圈了。

這道題主要是讓我們明白了有時候可以通過數字的位數以及每位上的數字來進行dp。當面們可以明顯的看出這道題與數字位數以及每位上的數字有關時,可以嘗試著尋找他們之間的關係。

#include #include using namespace std;

int dp[15][15];//長度,以什麼開頭

int digital[10];

int cal1(int k)

return c;

}void cal2(int k, int len)

}int solve(int k)

return 0;

}

hdu 2089 不要62(數字)

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...

HDU2089 不要62 題解

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...

HDU2089 不要62 數字DP

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...