題意:[l,r]區間內數字裡不含4且不含62的數字的個數。
數字dp入門題,感覺做了這道題之後才理解了什麼是數字dp。
首先多扯一句自己對數字dp的理解:確定乙個在各個數字答案之間的共性。
例如本題,我們用dp[i][0]表示長度為i位且上一位不是6的答案,用dp[i][1]表示長度為i位且上一位是6的答案,那麼在整個dp方程中如果這兩個處理出來了,那麼只有在邊界的時候需要一位一位的逐步向下遞迴,其他答案即可o(1)查詢。
那麼如何求呢,我們用dfs(len,pre,isin)來表示考慮到第len位,上一位是否為6,是否在邊界上的答案,那麼dp[len][pre]就是我們當前要求的答案,顯然如果上一位不是6,除了4往後放1-9都可以,那麼如果不在邊界上dp[len][0]=σ填除了4外1-9的答案,邊界為乙個數的時候答案是1,遞迴即可實現。如果上一位是6,這一位除了不能放4還不能發2,用上一步同理dp[len][1]=σ填除了4,2外1-9的答案,
最後也是數字dp的套路,用[1,r]的答案-[1,l-1]的答案即為[l,r]的答案了。
下附ac**。
#include#include#include#include#define maxn 105
using namespace std;
int digit[maxn];
int dp[maxn][maxn];
int dfs(int len,int pre,int isin)
if(!isin) dp[len][pre]=ans;
return ans;
}int solve(int now)
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 表示不存在不吉利數字,且最...