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

2021-07-31 20:10:49 字數 1159 閱讀 2330

題意:求【l,r】區間內有多個數滿足不含62和4.

這個題暴力也可以做因為範圍比較小。

但是如果數的上限開到1e9或者更大就gg了。

所以學習一種新的dp----數字dp。

也沒學得怎麼樣。

我的理解是:數字dp是按照構造數的方式,然後對數的每一位進行dp;

舉乙個簡單的dp;

dp[i][j]:表示的是第 i 位,前一位為 j 的滿足題意的條件.

這裡為什麼跟前一位相關,因為不能有62,如果前一位是6,那麼這一位就不能為2。

學習了一下dfs的板子,因為是dfs:

考慮一下邊界,如果只有乙個數,只要不為4,那麼個數就返回 1;

如果是兩位數,那麼就列舉十位的每個數,然後用記憶化搜尋的方式求個位的個數,累加起來就是十位的方法數,然後一次下去。

這樣每次的答案就是整十位,整百位的,根據題意來求的話就要變化一下:

比如i求234的滿足條件的個數:

那麼就是000-- 099

+100-- 199

+200-- 230-- 234

大概就是這麼個意思,因為這個板子跟記憶化搜尋和遞推聯絡很大,但是我對這兩個東西都不熟,感覺只有慢慢摸索了。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

int dp[20][10]; //在 i 位,前一位為 j 的個數

int a[20]; //分解這個數

int dfs(int pos,int pre,bool limit) //pos 位,前乙個數為pre,限制limit:是否達到數的上限

if(!limit)

dp[pos][pre]=ret; //這裡維護一下在沒有限制的條件下dp值,記憶化

return ret;

}int solve(int x)

int ans=dfs(pos-1,0,true); //初始limit 為 true

return ans;

}int main()

return 0;

}

hdoj2089不要62(素數打表)

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

hdoj 2089 不要62題解 先檢測再篩選

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

hdoj 2089 數字dp入門

題意 就是統計區間內沒有4和62的數的個數 分析 dp i,0 表示i位數不存在不吉利數的個數,dp i,1 表示i位數不存在不吉利數並且最高位為2的個數,dp i,2 表示i位數存在不吉利數的個數 首先對dp陣列進行乙個預處理,處理出i位數出現上述情況的個數,統計的時候都有統計字首0 dp i,0...