HDU 2089 不要62(數字DP入門)

2021-07-16 05:54:56 字數 1861 閱讀 5630

執著追求並從中得到最大快樂的人,才是成功者。——梭羅

第一次做這個題是暴力過的,感覺也沒啥,今天集訓講數字dp,想用數字dp做一下。自己還真是菜的扣腳啊~ 寫一下題解如果有錯誤希望指正!不勝感激。

原題鏈結

f[i][j] i代表有幾位數,j代表起始數字

例如f[3][1] 代表的是 100~199

即使是2^63-1 用 f[18][9]表示也足夠了 還真是神奇!

既然找到最優解那就好辦了,至於為什麼得到上面的式子呢?

1.當j=4也就是i位數4開頭,當然是0咯

2.當不是6 2時可以通過乙個例子來找到答案

假設f[3][3],即3xx

3xx可以寫成30x、31x、32x......39x

是不是發現規律了呢?

因為最高位3是一定的,所以我們只需要把f[i-1][k](0<=k<=9)加起來就行了

此時f[i][j]中存放了許多資料,讓我們看一下:

![資料](

既然處理好了f[i][j],接下來就是處理輸出問題了(這裡是我整理了一下其他人的部落格,再加上上面的一些解釋,應該沒問題了)

如何根據陣列f求對於乙個數n,0~n滿足要求的數呢?

例如335,對應f[3][3],但是滿足要求的數有336,347,358.....這些數超過了335

所以通過f[3][0],f[3][1],f[3][2]求得首位數字小於3的滿足條件的三位數,f[3][0]求得的數是001,052,093...也就是所有滿足條件的一位或兩位數……我們求得所有的2xx,1xx,0xx.

接下來要求的是如334,327這類首位是3滿足條件的數字,既然首位只能是3,也就是第一位已經選完了,那麼我們只要選擇滿足小於35的數字就可以了。和上面同理,我們只要求出f[2][0],f[2][1],f[2][2],就可以求出首位小於3的兩位數。這時求得的是32x,31x,30x。

然後我們求所有小於5的數字就ok了。小於5也就是f[1][0],f[1][1],f[1][2],f[1][3],f[1][4]。這時求得的是33x.

到此,所有小於335且滿足的數全部求出。

但是還需要考慮的問題是62,4。

如果某一位數字為4,如77432的第三位(從左向右看)是4,那麼我們依次求出

1、6***x,5***x,...,0***x

2、76***,75***,...,70***

3、773xx,773xx,...,770xx

我們接來下需要求的是7742x....7740x,但這時所求的數是774xx的數,必然含有4,這時停止。

對於62,如果某一位數字是6,如5675,我們求完5***,4***,...0***之後再求56xx時,注意566x,565x,..,563x,561x,沒有562x。如果數字中含有62,如5627,那麼同4,求到562x的時候就應該停止繼續求下去了。

因為求得的是小於n的數,所以求[0,n]之間的數需要求n+1.

以下是**:

#include 

#include

#include

#include

using

namespace

std;

int f[12][10];

int num[12];

void init()

int solve(int n)

int ans=0;

for(int i=len-1; i ; i--)

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

break;

}return ans;

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