求[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...