今天上午複習了數字dp(之前也沒學多少),想把dp大類都學一些然後開始刷dp類題目
然而發現之前不是真的明白,這次感覺是差不多明白了
尤其是那道不要62
之前以為明白了,實際上不明白,尤其是if(!limit)的時候才能記錄,其實很容易理解的,每次跑dfs遞迴的時候,都是深度搜尋,每乙個數向下都會搜到最底層,然後返回乙個值,這個時候如果把十位,百位...都記錄下來,下乙個深度搜尋的時候就可以直接返回答案了,為什麼?因為每乙個非邊界的同位置的數答案是一樣的,而記錄下來這些非邊界值,將會省去之後dfs的大量計算,但是如果是邊界數,很容易想到和非邊界數不同
#include#include#include#include#include#include#include#include#includeusing namespace std;
int a[10];
int dp[10][2];
int dfs(int pos, int pre, int sta, bool limit)
if(! limit) dp[pos][sta] = ans;
return ans;
}int getpos(int x)
return dfs(cnt, -1, 0, 1);
}int main()
return 0;
}
20201009day30 複習3 數字dp
lgp2657 scoi2009 windy數 求 a,b 之間 a 數 的個數。乙個數被稱為 a 數 當且僅當它不含前導零且相鄰兩個數字之差至少為2.1 le a le b le 2 times 10 9 只需要規定函式work x 求 1,x 內所有的 a 數 的個數,字首和就好。設 dp 表示...
複習 動態dp
你還是可以認為我原來寫的動態dp就是在扯蛋。首先作為乙個 dp 題,我們顯然可以每次修改之後都進行暴力 dp 設 f i 0 1 表示當前考慮 i 及其子樹內的點,當前這個點是選還是不選時能夠得到的最大權值,那麼我們可以得到轉移 f i 0 max f i 1 f v 0 其中 v 是 i 的乙個兒...
數字DP入門 BZOJ 1833 題解(需要複習)
顯然,這篇部落格受popoqqq的影響,自己敲了一遍,基本上和popoqqq的 一樣,在這裡寫一下題解 題目 time limit 3 sec memory limit 64 mb submit 3421 solved 1510 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digi...