Algorithm 矩阵中获得特定乘积的有效置换总数

Algorithm 矩阵中获得特定乘积的有效置换总数,algorithm,math,matrix,combinations,permutation,Algorithm,Math,Matrix,Combinations,Permutation,我一直在努力解决codeforces的问题。问题是,有n行和m列组成二维矩阵。我们必须以这样的方式填充所有单元格,即每行和每列的乘积应等于-1或1 为简单起见,让我们考虑一下这种情况: n=4,m=4,乘积(在合力中给出的变量k)=-1 这就是我所做的: 如果行数=1,那么这些是我们必须考虑得到产品的可能性1。< /P> 不管列数多少,如果我们有一个-1或三个-1或五个-1,或者基本上是奇数个-1,我们可以说乘积可以是-1 所以置换的总数是p(m,1)/1!+p(m,3)/3!+p(m,5)/5

我一直在努力解决codeforces的问题。问题是,有n行和m列组成二维矩阵。我们必须以这样的方式填充所有单元格,即每行和每列的乘积应等于-1或1

为简单起见,让我们考虑一下这种情况: n=4,m=4,乘积(在合力中给出的变量k)=-1

这就是我所做的:

如果行数=1,那么这些是我们必须考虑得到产品的可能性1。< /P> 不管列数多少,如果我们有一个-1或三个-1或五个-1,或者基本上是奇数个-1,我们可以说乘积可以是-1

所以置换的总数是p(m,1)/1!+p(m,3)/3!+p(m,5)/5!+p(m,7)/7!+。。。(如果m为偶数m,则为m-1)

其中p(m,r)是在m个位置安排r个事物的方式数


但是当上面的一个扩展到矩阵时,它就变得很难了,因为在一个特定列中的每一次洗牌都会导致下一列中的另一次洗牌。如何做到这一点?

您可能应该阅读。一旦你读了它,就很容易理解。我还没有理解社论,所以我问了一个问题:矩阵中只能有两个元素
1
-1
。如果
k==-1
m
是奇数而
n
是偶数(或反之亦然),那么有一件事可以肯定的是,不可能满足问题中的约束条件(
-1
)。对于其余的情况,需要注意的另一点是,决定所有行和列的乘积是
k(1还是-1)
。是的,我们可以在问题中看到它本身。我在社论中不明白的是,为什么他们会考虑n-1,m-1行,答案是pow(2, [(n) - 1) * (m) - 1) ])。这仅由一行和一列决定。因此,我们可以在任何单元格中放置任何数字(1或-1),除了我们已设置的一行(假设最后一行)和一列(假设最后一列),以决定乘积是(1还是-1)。因为我们可以为(n-1)*(m-1)子网格中的每一个子网格放置任意数量的(1,-1),所以我们有两个选择:1或-1。因此2^((m-1)*(n-1))。现在对于第(n-1)行和第(m-1)列,我们不需要做任何事情,因为无论第i行中所有(m-1)单元格的乘积是什么,我们都可以通过在第m行单元格中放入1或-1将其转换为所需的乘积(k)。