數位DP 題集

來源:互聯網
上載者:User

數位DP 題集

/*-------------------------------------------------------------------------*/

常用數位DP寫法:

int dfs(int i, int s, bool e) {    if(i==-1) return s==target_s;    if(!e && ~f[i][s]) return f[i][s];    intres = 0;    intu = e?num[i]:9;    for(int d = first?1:0; d <= u; ++d)       res += dfs(i-1, new_s(s, d), e&&d==u);   return e?res:f[i][s]=res;}

其中:

f為記憶化數組;

i為當前處理串的第i位(權重標記法,也即後面剩下i+1位待填數);

s為之前數位狀態(如果要求後面的數滿足什麼狀態,也可以再記一個目標狀態t之類,for的時候枚舉下t);

e表示之前的數是否是上界的首碼(即後面的數能否任意填)。

for迴圈枚舉數字時,要注意是否能枚舉0,以及0對於狀態的影響,有的題目前置0和中間的0是等價的,但有的不是,對於後者可以在dfs時再加一個狀態變數z,表示前面是否全部是前置0,也可以看是否是首位,然後外面統計時候枚舉一下位元。It depends.

於是關鍵就在怎麼設計狀態。當然做多了之後狀態一眼就可以瞄出來

注意:

不滿足區間減法性質的話(如hdu 4376),不能用solve(r)-solve(l-1),狀態設計會更加詭異。

/*-------------------------------------------------------------------------*/

hdu2089 不要62

Hdu3555不能出現連續的49

UESTC 1307相鄰的數差大於等於2

HDU 3652 出現13,而且能被13整除。

HDU 3709 平衡數

light OJ 1140兩個數之間的所有數中零的個數。

lightoj 1032  位元中連續兩個‘1’出現次數的和

Codeforces 55D. Beautiful numbers

POJ 3252  Round Number (組合數)

LightOJ 1068 能被K整數且各位元字之和也能被K整除的數

LightOJ1205求區間[a,b]的迴文數個數。

hdu3886求滿足符號串的數字個數。

HDU4352嚴格上升子序列的長度為K的個數。

ural 1057 數位統計

codeforces215E周期數

codeforces258B在1-m中任選7個數,要使前六個數字中的“4”,"7"之和小於第七個的,

HDU4507 和7無關數的平方和

Zoj2599 數位統計(見題意)

zoj3162分形、自相似

ZOJ3494 BCD Code(AC自動機+數位DP)

/*-------------------------------------------------------------------------*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.