數字dp變相 HDU 5456

2021-10-09 08:51:52 字數 755 閱讀 6722

題意:給你n個火柴 讓你湊成a-b=c的形式,不包括前導0,問總共有多少個方案數(mod上m)。

思路:真的想不出來,太妙了,先把a-b=c變形成a=b+c,然後從低位往高位列舉每位填的數,dp狀態定義成f[i][f1][f2][flow] (只剩下i根火柴,b是否填完,c是否填完,是否有進製的方案數),終止條件就是b和c都填完了,看看是否有進製。很妙,每次火柴數量減去要填的數量,a的數字可以算出來,是(flow+i+j)%10。

**:

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n=

510;

int stk[10]

=;ll f[n][2

][2]

[2];

//將a-b=c 轉化為 a=b+c ,狀態含義為只剩下i根火柴 b和c是否列舉完,是否有進製

int n,m;

ll dfs

(int num,

bool f1,

bool f2,

bool flow)}if

(f1 &&

!f2)}if

(!f1 &&

!f2)

}return v = ans;

}int

main()

return0;

}

hdu5787 數字dp 數字壓縮

分析 大概是比較經典的數字dp,需要維護連續的 k 個數字不相同,所以我們的狀態記錄裡需要記錄前k 1個數字是哪些,擴充套件下一位的時候不能出現前k 1 位的數字。這樣就來設計狀態 dp len k ban 表示前長度為le n 連續的 k 個字元禁止出現相同,前k 1個數字為ba n 這裡的ban...

HDU 2089 數字dp (簡單)

數字dp 和hdu 3555類似,稍微複雜了點點,不同在於,一 多考慮4的情況 二 因為子串是 62 而3555的子串 49 末尾數字不同 所以這題要多加一種情況if num i 2 last 6 last 表示前一位數num i 1 狀態還是一樣 dp i 0 表示所有不含不吉利的數開頭任意 dp...

HDU 2089 數字 dp 入門

可暴力,可dp。參考資料 click me 第二個版本的 參考資料 7k 的板子 第二個版本 在下面 做這道題的時候有兩個疑問 第一 既然在dp中 51 既可以看做 51 也可以看做 0051 或者 000051 那麼51這個數字會不會計算多次。第二 既然狀態轉移保證了數字的合法,在統計的時候是否還...