洛谷P5691题解
本人用的是暴力分类讨论 + \(unordered\_map\) 存储,与所有的题解都不同。
因为 \(n \leq 6\) ,非常的小,并且我不想写 DFS,所以直接暴力分类讨论 \(n=1,n=2,\dots,n=6\) 的情况。
当 \(n \leq 3\) 时,可以用循环嵌套来解决,这里就不再赘述了。
当 \(n > 3\) 时,暴力循环去做的时间复杂度达到了 \(O(m^n)\) ,无法通过本题,所以考虑优化(以 \(n=6\) 为例,其余类推):先枚举 \(x_1,x_2,x_3\) ,存储 \(k_1\times x_1^{p_1}+k_2\times x_2^{p_2}+k_3\times x_3^{p_3}\) ,接下来枚举 \(x_4,x_5,x_6\) ,则答案就要增加 \(k_1\times x_1^{p_1}+k_2\times x_2^{p_2}+k_3\times x_3^{p_3} = -(k_4\times x_4^{p_4}+k_5\times x_5^{p_5}+k_6\times x_6^{p_6})\) 的个数,用 \(map\) 存一下即可。
时间复杂度 \(O(m^{\frac{n}{2}})\),但是这个做法非常慢,用 \(unordered\_map\) 会好一点。