2023.12.9 总结

T1

题意:一枚棋子每一步只能走到与它原位置不同行与不同列的位置,现在将其放在一个 \(R\)\(C\) 列的棋盘中,此棋子走 \(N\) 步,经过的点构成一个排列,问有多少种不同排列?\((R,C,N \le 200)\)
初步思路此题是 \(DP\)
\(f_{i,j,u}\) 为走了 \(i\) 步,在 \(j,u\) 位置的走法,每一次一个一个点转移,时间复杂度 \(O(NR^2C^2)\)
反着考虑,每走一步先求整个棋盘的总方案,再减去同行同列的方案,时间复杂度为 \(O(NR^2C+NRC^2)\)
用前缀和优化,时间复杂度为 \(O(NRC)\)

T2

题意:一个 \(n\)\(m\) 边的无向图,共 \(k\) 种颜色,编号为 \(1\)\(k\) ,对这些点染色,相邻的点的颜色编号和不能为 \(z\) ,问有多少种方案?$ (n,m \le 18 ,k,z\le 10^9)$
\(n,m\) 很小,从 \(n,m\) 角度考虑。
考虑容斥,每次钦定一些边矛盾,并查集处理,套容斥公式即可。
时间复杂度 \(O(2^mn)\)

T3

题意:求有多少个数既为 \(N\) 的倍数,又为 \(S\) 的子串。\((|S| \le 5000,N \le 1000)\)
考虑 \(DP\)
\(f_{i,j}\) 为处理到第 \(i\) 位,除 \(N\)\(j\) 的数有多少个,直接 \(DP\) 处理即可,答案即为 \(\sum_{1 \le i \le |S|} f_{i,0}\)
但是这样会出现重复的数,若一个数在 \(S\) 中出现了两次,就会记重。
我们可以这样做,\(DP\) 状态加一个 \(0\)\(9\) ,表示最后一位,初始化不在 \(0\) 而在每一位初始化。
这样就可以做到去重。

T4

不会

posted @ 2024-01-26 20:50  dijah  阅读(18)  评论(0编辑  收藏  举报