數字dp(模板)

2021-10-20 02:05:24 字數 908 閱讀 3842

一篇不錯的部落格

一般數字dp問題是這樣的:

求出在給定區間 [a,b] 內,符合條件 f(i) 的數 i 的個數。條件 f(i) 一般與數的大小無關,而與數的組成有關

例如:給出乙個數n,1~n有多少數包含49,測試資料1<=t<=10000,1<=n<=2^63-1

#include

using namespace std;

const int max = 99999;

const int min = 0;

const int inf = 1e6;

const int mod = 1e9+7;

#define m 1000

#define n 1000

#define ll long long

#define swap(x,y) x^=y^=x^=y

ll dp[20]

[6];

int digit[20]

;ll dfs(int pos,int pre,int sta,bool limit)

if(!limit) dp[pos]

[sta]

=sum

; //沒有限制將dp的數值存起來,以便呼叫

return

sum; //返回值

}ll solve(ll a)

ll ans = dfs(cnt-1,0,0,true)

; //對這個數進行dfs

return ans;

}int main(

)return 0;

}

數字DP入門 數字DP模板

數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...

數字dp 模板

dp pos,狀態變數.限制布林 if limit dp 狀態 a 已經求出對應狀態值下的結果了 記錄下來 return a 所以 數字dp其實就是一種求解有關於l到r有多少個符合條件的數目類似的統計問題的解題思路 一遍遍數字列舉太慢 不如我們根據條件列舉數字 數字dp本質上是記憶化搜尋 我們需要在...

數字DP模板

數字dp問題,大多是統計數量,通常用按位處理的方法解決。具體為 詢問 l,r l,r l,r 中滿足某一條件的數。利用字首和的思想,我們可以把問題簡化,即轉化為詢問 1,r 1,r 1,r 和 1,l 1 1,l 1 1,l 1 實現時,常常使用記憶化搜尋,由於有很多限制條件,所以常常增加幾維狀態,...