題意:給你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這個數字會不會計算多次。第二 既然狀態轉移保證了數字的合法,在統計的時候是否還...