<h2>简短回答</h2>
<p>这也可以通过数学方法解决,因此公式为:</p>
<p>24<sup>n</sup>-(9*8<sup>n</sup>-9*2<sup>n</sup>-18*3<sup>n</sup>+24)</p>
<pre><code>def countPatterns(n):
result = 24**n - (9 * 8**n - 9*2**n - 18*3**n + 24)
mod = 10 ** 9 + 7
return result % mod
print (countPatterns(4))
</code></pre>
<blockquote>
<p>296490</p>
</blockquote>
<h2>长话短说</h2>
<h2>一,。条件:没有行包含相同的值</h2>
<p>对于给定的行,有<code>3 </code>种方法可以在每个单元格中设置颜色。因此,有3个</sup>3个</sup>=27个可能的组合。然而,在这些<code>27</code>组合中,<code>3</code>是<code>GGG</code>、<code>BBB</code>和<code>RRR</code>。因此,必须排除它们,并且一行中的有效组合数为<code>27 - 3 = 24</code></p>
<p>因此,具有n行的表的组合总数为24<sup>n</sup></p>
<h2>二,。条件:没有列包含相同的值</h2>
<p>为了解决这种情况,我们可以计算所有“无效组合”,然后从总数中减去它们的数目(如前一节所述,总数为24<sup>n</sup>)</p>
<h2>2.1无效组合</h2>
<ol>
<li>只有第一列具有相同的值</李>
<li>只有第二列具有相同的值</李>
<li>只有第三列具有相同的值</李>
<li>只有前两列具有相同的值(第一列的值不一定等于另一列)</李>
<li>只有最后两列具有相同的值</李>
<li>只有第一列和最后一列具有相同的值</李>
<li>每列中的值相等</李>
</ol>
<p>显然,<code>1</code>的组合数等于<code>2</code>和<code>3</code>。关于<code>4</code>、<code>5</code>和<code>6</code>也可以注意到这一点</p>
<p>如果我们把从<code>1</code>到<code>7</code>的组合求和,那么我们将得到总数</p>
<p>但是,很难单独计算(1)-(7),但更容易计算组合的数量,以便至少<code>k</code>列具有相同的值。一旦找到这些,我们将应用<a href="https://en.wikipedia.org/wiki/Inclusion%E2%80%93exclusion_principle" rel="nofollow noreferrer">inclusion-exclusion principle</a>来查找问题中提出的组合数</p>
<h3>2.1.1第一列具有相同的值</h3>
<p>对于每一行,都有<code>8</code>组合,使得该行以<code>R</code>开头:</p>
<pre><code>RRG
RRB
RGR
RGG
RGB
RBR
RBG
RBB
</code></pre>
<p>这意味着对于具有<code>n</code>的表,有8个组合,其中第一列由<code>8</code>组成。其中,存在3×8<sup>n</sup>组合,使得第一列从<code>R</code>、<code>G</code>或<code>B</code>开始</p>
<p>现在,重要的是要认识到,这个数字表示<code>4</code>无效案例<code>1</code>、<code>4</code>、<code>6</code>和<code>7</code>(所有包含第一列的列集)</p>
<h3>2.1.2第二列具有相同的值</h3>
<p>基本上,我们可以使用与上面相同的逻辑来实现它也是3*8<sup>n</sup></p>
<p>这表示<code>2</code>、<code>4</code>、<code>5</code>和<code>7</code></p>
<h3>2.1.3第三列具有相同的值</h3>
<p>与之前相同-3*8<sup>n</sup></p>
<p>这包括{<cd3>}、{<cd12>}、{<cd13>}和{<cd15>}</p>
<p>如果我们将这些<code>3</code>步骤的组合相加,我们将得到<strong>9*8<sup>n</sup></strong>。然而,正如在这些步骤中所指出的,我们将对<code>4</code>、<code>5</code>和<code>6</code>进行两次计数<code>7</code>将被计数三次</p>
<h3>2.1.4 2列具有相同的值</h3>
<p>让我们为<code>2</code>第一列计算它,因为每对列的数量仍然相同</p>
<p>如果一行以<code>2</code>相同颜色开头,则每种颜色都有<code>2</code>组合。如果不是,则每对都有<code>3</code>个组合(有<code>6</code>个可能的对)。因此,组合的总数是<strong>3*2<sup>n</sup>+6*3<sup>n</sup></strong></p>
<p>因此<code>4</code>和<code>7</code>的组合数是3*2<sup>n</sup>+6*3<sup>n</sup></p>
<p>{<cd12>}和{<cd15>}的组合数为3*2<sup>n</sup>+6*3<sup>n</sup></p>
<p><code>6</code>和<code>7</code>的组合数为3*2<sup>n</sup>+6*3<sup>n</sup></p>
<h3>2.1.5每列中的值等于</h3>
<p>这意味着所有行必须相等。因为只有<code>24</code>在构造行的方法中,有<code>24</code>种方法可以使列中的所有值相等。所以,它是<strong>24</strong></p>
<h2>无效个案总数</h2>
<p>如前所述,如果我们将<em>2.1.1</em>、<em>2.1.2</em>和<em>2.1.3</em>相加,那么我们将计算<code>4</code>、<code>5</code>和<code>6</code>两次,<code>7</code>-<code>3</code>次(从<strong>2.1</strong>)。由于每对列的组合数相同,我们只需减去<strong>3*2<sup>n</sup>+6*2<sup>n</sup><strong><code>3</code>次(从2.1.4开始),然后将三列的组合数相加一次(因为减法后不会出现)</p>
<p>9*8<sup>n</sup>-3*(3*2<sup>n</sup>+6*3<sup>n</sup>)+24=9*8<sup>n</sup>-9*2<sup>n</sup>-18*3<sup>n</sup>+24</p>
<h2>三,。最终答案</h2>
<p>现在,只需从24例中减去无效病例数:</p>
<p>24<sup>n</sup>-(9*8<sup>n</sup>-9*2<sup>n</sup>-18*3<sup>n</sup>+24)</p>
<p>不要忘记在最后应用10<sup>9</sup>+7的模运算</p>