2016ACM多校 HDU5787 數字DP

2021-07-16 05:44:43 字數 889 閱讀 3004

求[l,r]中這樣一種數的個數,它的每連續k位都滿足兩兩不相同。2<=k<=5

k很小,典型的數字動態規劃,為了方便寫成記憶話搜尋的形式。從高位往低位決策,傳入之前臨近的k位是哪些數,這一位是否可以自由列舉0~9,是否來自前導零。為了修改最近的k位所占用的數,要用乙個佇列或者其他資料結構維護填數的先後順序。如果這一位可以自由列舉那麼之後就都可以自由列舉,而且僅受制於前k位用過幾個數(前導零不算,這裡是可記憶化的關鍵),記憶化可以自由列舉的情況,就不會超時。但k發生改變記憶化就不行了,要初始化。複雜度o(10^klogn)。

#include 

#include

#define maxn 20

int k;

char ns[maxn];

int nt;

//將數字分解到字串

void decompose(long

long x)

}long

long dp[maxn][1

<<10][2]; //dp[i][j][k]到第i位,stat為j,begin為k的方案數

int path[maxn];

int pt;

//記憶化搜尋,bit當前決策位,stat前k位數字,fe是否可自由列舉,begin前導0結束

long

long dfs(const

int bit, const

int stat, const

char fe, const

char begin)

if(fe)

dp[bit][stat][begin] = cnt;

return cnt;

}int main()

return

0;}

2016ACM多校 HDU5758 貪心 搜尋

一棵樹,要遍歷所有的邊,不能往回走。走到盡頭的時候可以傳送到另乙個點,首先要保證使用傳送次數最少。所走的路徑是最小鏈覆蓋,由兩個兩個葉子的鏈組成,如果有奇數個子葉節點,那麼會多一條從某乙個葉子到祖先的一條特殊路徑。那麼對於每乙個葉節點,一定有且只有一條指向祖先的路徑。對於乙個非葉,會收到來自子節點上...

2016多校集訓 hdu5852

題目是乙個棋盤,給你k個棋子和k個目的地,每乙個棋子都是在1行,每乙個目的地都是在n行,要求找出讓k個棋子移動到k個目的地的路徑不交叉的方案數。這個其實也是個套路題目,知道乙個定理。就可以,但是我不知道定理的名字。但是考慮2個棋子的情況 a1 a2 b1 b2 其中使用a b表示 a到b的方案數 那...

2016多校聯賽 hdu 5724 Chess

此題就是乙個sg函式的題目,需要找出每一行的sg值,然後異或就可以咯。找sg需要在初始化的時候就找,也就是在t之前,暴力找出所有情況的sg。注意這個題只有20行,所以狀態壓縮一下就可以,每一行有棋子的地方就置為1,每一的地方就是0.include include include include in...