**題意:**
給出乙個範圍 $(l,r)$ , 要求計算該範圍中 滿足 其中連續兩位不為62, 並且不包含4 的符合條件個數。
**思路:**
在用數字dp寫之前發現自己以前用暴力的方法過去了....(就直接列舉然後除餘 4 和 64)所以明明做過一道數字dp的題,卻對數字dp毫無印象..
關於數字dp:在數字上計數用的dp,一般就是要統計乙個區間$[l,r]$內滿足一些條件數的個數。
這邊部落格寫的很詳細:[數字dp入門](
數字dp的記錄一般為:$dp[number][state]$ ,即數字個數, 以及不同題目中對應的狀態。
乙個$solve()$函式處理讀入 數的所有位數值,並存於乙個 陣列中。
然後 $dfs(int \space pos,int \space pre,int \space state,int \space limit)$ 記錄轉移中 列舉的第幾個數字,其前一位值, 當前為哪一種狀態 ,以及當前位列舉上限。
然後具體細節就看**了...有註解
code:
```ruby
#include #include #include #include using namespace std;
int a[20];
int dp[20][2];
//對於乙個數 n 找到從1 ~ n 的所有非法情況數目。
//當前位,前導位,狀態數,上限
//state表示上一位是否為6
int dfs(int pos,int pre,int state,bool limit)
if(!limit) dp[pos][state] = tmp;
return tmp;
}int solve(int x)
//位數,前導初始化-1..
return dfs(pos-1,-1,0,true);
}int main()
}
hdu 2089 不要62(數字)
problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...
hdu2089 不要62(基礎數字dp)
題意 規定乙個合法的號碼不能含有4或者是連續的62 給定區間 n,m 問此區間內合法的號碼的個數 分析 數字dp dp i j 代表 最高位為 j 的 i 位數有多少個合法的 然後按題目規則進行轉移即可 dp結束後,再統計範圍內的總數,最後打表輸出 include include include u...
HDU2089 不要62 數字DP
problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...