題意:求【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...