这种数学数数计算题搞到计算机上就变的很简单了。。。。
可以暴力 \(dfs\) \(O(3^{15})\) 也可以简单 \(DP\) \(O(15*m)\) \(m\) 是边数。
设 \(f_{i,j}\) 为走 \(i\) 步到 \(j\) 的方案数,每层递推即可。
#include <iostream>
#include <cstdio>
using namespace std;
int m;
int g[40][2], f[16][10];
void add(int u, int v) {
u -= ‘A‘, v -= ‘A‘;
g[++m][0] = u, g[m][1] = v;
}
int main() {
add(‘A‘, ‘J‘); add(‘J‘, ‘A‘);
add(‘B‘, ‘I‘); add(‘I‘, ‘B‘);
add(‘C‘, ‘H‘); add(‘H‘, ‘C‘);
add(‘D‘, ‘G‘); add(‘G‘, ‘D‘);
add(‘E‘, ‘F‘); add(‘F‘, ‘E‘);
add(‘A‘, ‘B‘);
add(‘B‘, ‘C‘);
add(‘C‘, ‘D‘);
add(‘D‘, ‘E‘);
add(‘E‘, ‘A‘);
add(‘F‘, ‘G‘);
add(‘G‘, ‘H‘);
add(‘H‘, ‘I‘);
add(‘I‘, ‘J‘);
add(‘J‘, ‘F‘);
f[0][0] = 1;
for (int i = 1; i <= 15; i++) {
for (int j = 1; j <= m; j++) {
int u = g[j][0], v = g[j][1];
f[i][v] += f[i - 1][u];
}
}
printf("%d\n", f[15][0]);
return 0;
}
得出结论 \(3004\)
前置知识:
\(C_a^{b}\) 表示从 \(a\) 里面选 \(b\) 个,忽略顺序的方案数。(公式请自行百度组合数)
把 \(a\) 个完全相同的物品分成 \(k\) 组,每组至少有一个物品的方案数。
把 \(a\) 个物品排成一列,相邻两个之间想象有一个隔板,相当于从这 \(a - 1\) 个隔板里选出 \(k - 1\) 个隔板忽略顺序。
分出的 \(k\) 份就是答案。
故公式为 \(C_{a - 1}^{k - 1}\)
求 \(x_1 + x_2 + ...+x_n = m\) 的正整数解。
看做 \(m\) 个物品分成 \(n\) 份即可,代公式 \(C_{m - 1}^{n - 1}\)
求 \(x_1 + x_2 + ...+x_n = m\) 的非负整数解。
令 \(y_i = x_i + 1\)。
变换一下为求 \(y_1 + y_2 + ...\ y_n = m + n\) 的正整数解。
带入上次的公式即为 \(C_{n + m - 1}^{n - 1}\)。
hhhh我相信没人能看懂我写的这么个破玩意的。
猪脑子不会做这题。
先进行一步转化:
将 \(A, B, C, D, E\) 视为 \(0, 1, 2, 3, 4\)。
将 \(J, I, H, G, F\) 视为 \(0‘, 1‘, 2‘, 3‘, 4‘\)
下面所述一切操作在 \(\bmod 5\) 意义下
一次从内外转换:在 \(i\) 与 \(i‘\)之间相互切换。
在内圆走:\(i \Rightarrow i + 1\)
在外圆走:\(i \Rightarrow i - 1\)。
初始状态 \(0‘\)。目标状态 \(0‘\)。求进行 \(15\) 次操作成功抵达目标状态的方案数。
设在内圈逆时针走了 \(a\) 步,在外圈顺时针走了 \(b\) 步,外圈内圈上反复横跳走了 \(c\) 步。
限制条件:
\(a + b + c = 15\)
\(c\) 是偶数。若 \(c\) 是奇数,最后会停在外圈
由第二题限制,可知 \(a + b\) 为奇数。
\(a\) 对位置的数值贡献是 \(+a\),\(b\) 的贡献是 \(-b\)。为了保证最终停在 \(0\),需要保证 \(a \equiv b \pmod 5\)。
经过这些恶心的限制以后,筛出所有符合的 \((a, b, c)\) 数对:
\((0, 5, 10), (0, 15, 0), (1, 6, 8), (2, 7, 6), (3, 8, 4), (4, 9, 2), (5, 0, 10), (6, 1, 8), (7, 2, 6), (8, 3, 4), (9, 4, 2), (10, 5, 0), (15, 0, 0)\)
真tm好!
对于一组 \(a, b, c\),考虑构造具体的方案。
把每一步当作一个字符,形成的路径可以看做一个字符串如 \(aaaaacccccccccc\)。
具体的方案限制:
方案计算需要组合排列的知识。
考虑先把 \(c\) 丢进去,构造方案地将 \(a, b\) 插入的方案。
将每两个 \(c\) 化为一组,\(?cc?cc?cc?\) 。即每个 \(?\) 的位置可以插入 \(0\) 到无限多个 \(a\)。方案数即将 \(a\) 个插入这 \(\dfrac{c}{2} + 1\) 个位置里,等价于 \(x_1 + x_2 + ..+x_{\frac{c}{2} + 1} = a\) 非负整数解的方案数。用隔板法可知(老 生 常 谈)方案数为 \(C_{a + \frac{c}{2}}^\frac{a - 1}{2}\)。
第一个 \(c\),后面每两个 \(c\) 化为一组,\(c?cc?cc?c\) 。即每个 \(?\) 的位置可以插入 \(0\) 到无限多个 \(a\)。方案数即将 \(a\) 个插入这 \(\dfrac{c}{2}\) 个位置里,等价于 \(x_1 + x_2 + ..+x_{\frac{c}{2}} = b\) 非负整数解的的方案数。用隔板法可知(老 生 常 谈)方案数为 \(C_{b + \frac{c}{2} - 1}^{\frac{c}{2} - 1}\)。
故一种 \(a, b, c\) 三元组的贡献是 \(C_{a + \frac{c}{2}}^\frac{c}{2} \times C_{b + \frac{c}{2} - 1}^{\frac{c}{2} - 1}\)。答案为所有贡献之和。
注意特殊情况 \(c = 0\) 时,我们不会负数的组合数(无意义),不能用这个公式,横跳不到外圈:
把刚才那一堆恶心的东西按照 \(c\) 排序应该会好算一点
$ (4, 9, 2), (9, 4, 2), (3, 8, 4), (8, 3, 4), (2, 7, 6), (7, 2, 6), (1, 6, 8), (6, 1, 8) , (0, 5, 10), (5, 0, 10)$
\(Ans = 1 + C_5^1\times C_{9}^0 + C_{10}^1\times C_{4}^0 + C_{5}^2\times C_{9}^1 + C_{10}^2\times C_{4}^1+ C_5^3\times C_{9}^2 + C_{10}^3\times C_{4}^2 + C_{5}^4\times C_{9}^3 + C_{10}^4\times C_{4}^3 + C_5^5\times C_{9}^4 + C_{10}^5\times C_{4}^4\)
显然的,奇偶拆开,这是有规律的,但是我并没有找到,导致搞出来这么个破玩意:
\(Ans = 1 + C_5^1\times C_{9}^0 + C_{5}^2\times C_{9}^1 + C_5^3\times C_{9}^2 + C_{5}^4\times C_{9}^3 + C_5^5\times C_{9}^4 + C_{10}^1\times C_{4}^0 + C_{10}^2\times C_{4}^1+ C_{10}^3\times C_{4}^2 + C_{10}^4\times C_{4}^3+ C_{10}^5\times C_{4}^4\)
\(= 1 + 5*1+10*9+10*36+5*84+1*126+10*1+45*4+120*6+210*4+252*1\)
\(= 1 + 5 + 90 + 360 + 420+126+10+180+720+840+252\)
\(= 3004\)
这是人做的题吗???????????????????????????????????
我再尝试一下能不能找到简单的组合意义。
\(Ans = 1 + C_5^1\times C_{9}^0 + C_{5}^2\times C_{9}^1 + C_5^3\times C_{9}^2 + C_{5}^4\times C_{9}^3 + C_5^5\times C_{9}^4 + C_{10}^1\times C_{4}^0 + C_{10}^2\times C_{4}^1+ C_{10}^3\times C_{4}^2 + C_{10}^4\times C_{4}^3+ C_{10}^5\times C_{4}^4\)
利用 \(C_n^m = C_n^{n - m}\) 将式子等价转化一下。
\(Ans = 1 + C_5^4\times C_{9}^0 + C_{5}^3\times C_{9}^1 + C_5^2\times C_{9}^2 + C_{5}^1\times C_{9}^3 + C_5^0\times C_{9}^4 + C_{10}^1\times C_{4}^4 + C_{10}^2\times C_{4}^3+ C_{10}^3\times C_{4}^2 + C_{10}^4\times C_{4}^1+ C_{10}^5\times C_{4}^0\)
\(= 1 + \sum_{a+b=4} C_5^a \times C_9^b + \sum_{a + b = 5}C_4^a\times C_{10}^b\)
好吧还是什么都想不出来,佛了佛了。
(大佬们应该能想出更为容易的组合意义表示,反正我是想不出来,目前能想到的就是这个枚举的是 \(a = k+1\) 的 \(k\) 然后就想不到怎么分配了。
原文:https://www.cnblogs.com/dmoransky/p/12680460.html