不要62 HDU 2089 (簡單數字DP)

2021-09-06 23:44:58 字數 1386 閱讀 3453

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

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

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

62315 73418 88914 

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

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

input

輸入的都是整數對n、m(0output

對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。 

sample input

1 100

0 0

sample output

80
題意如題目

解題方法:數字dp

這是一道較為簡單的數字dp裸題,雖說簡單,但是一開始理解起來會很困難

題中說要在給定集合裡找到不滿足條件的數的個數,當資料範圍比較大的時候,暴力是一定不可能的

這時候我們利用數字dp來解決此類問題

首先,我們已知[a, b],那麼可以將這個區間分解成[0, a]和[0, b],那麼只需求[0, b] - [0, a - 1]之間滿足的數的個數即可

然後將a和b的每一位的數存到陣列a中各個元素,並得到位數length,然後再定義乙個二維dp陣列

至此,準備工作完成

接下來,我們進行記憶化搜尋,利用深度優先搜尋的原理,記錄上一位是否為6和列舉這一位,如果沒有限制的話很好辦,直接列舉就可以了,但是這樣可能會超空間,因此我們每次都必須要判斷是否有最大的限制,比如說最大是455,那麼百位的遍歷範圍只有0到4,十位和個位同理,當沒有限制時遍歷直接0到9,同時已經計算過的狀態不會計算第二次,深度優先遍歷到最底層、然後向上傳遞返回值,滿足條件的會存放到dp陣列中,定義乙個變數計算它們的和,函式引數設定以及dp陣列設定不唯一,具體見**

**:

#include #include #include #include using namespace std;

int a, b, shu[100];

long long dp[20][2];

long long dfs(int len, int pre, int state, bool limit)

if(!limit)

dp[len][state] =ans;

return ans;

}int solve(int x)

return dfs(k - 1, 0, 0, true);

}int main()

return 0;

}

不要62 HDU 2089 數字DP

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

不要62 HDU 2089 (經典數字dp)

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

不要62 HDU 2089 數字dp板題

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