演算法學習 數字DP

2022-07-24 11:54:12 字數 676 閱讀 2575

乙個極大的多位數字中,存在某種特殊情況出現多少次

通過記憶化和動態規劃的方法,將之前的情況數記錄下來,在計算其他情況的時候,通過狀態的轉移相互利用

【模板】

【題意】求1~n之間有多少個數又含有13又能被13整除,(1<=n<=1e9)

【**】

#include#include#define maxn 20

int dp[maxn][maxn][10];

int maxx[maxn];

//maxx記錄整個數字的上限

//len 表示當前列舉的數字長度

//mod 表示狀態之一,現在這個長度對16取餘的結果

//stu 狀態之一,當前的數字是否存在

//lim 狀態之一,前面的數字是否達到上限,因為列舉的情況在前面沒有達到的話,後面的是可以任取的

// 而如果達到的話,就需要考慮數字的取值範圍了

int geta(int len,int mod,int stu,bool lim)

if(!lim)//沒有超過的話,就將計數返還

dp[len][mod][stu]=cnt;

return cnt;

}int main()

printf("%d\n",geta(len,0,0,1));

}}

演算法學習筆記六 dp

題目描述 在乙個n n的矩陣中,每個格仔都有乙個整數,pipi位於矩陣的左上角,它想知道有多少條不同合法路線達到矩陣右下角。行走規則如下 1 每次只能往下或往右走一步。2 格仔中的整數表示從該點出發一步必須跨越的距離。ps 對 1 和 2 條件的解釋 若此時在 x,y 並且格仔上的數字為 k 則下一...

演算法學習 換根dp

一般來說,我們做題的樹都是預設 1 為根的。但是有些題目需要計算以每個節點為根時的內容。樸素的暴力 以每個點 u 作為 root 暴力dfs下去,複雜度 o n 2 正確的做法 換根dp,複雜度 o n 第一次掃瞄,先預設 root 1 跑一遍 dfs 第二次掃瞄,從 root 1 開始,每次從 u...

演算法學習之路 火星數字

火星人是以13進製計數的 地球人的0被火星人稱為tret。地球人數字1到12的火星文分別為 jan,feb,mar,apr,may,jun,jly,aug,sep,oct,nov,dec。火星人將進製以後的12個高位數字分別稱為 tam,hel,maa,huh,tou,kes,hei,elo,syy...