分析
我们假设主视图的颜色为1
如果只有两种颜色,且能求出w[x][y]表示一列中放置x个1和y个2的方案数
则我们可用dp[i][j][k]表示考虑到第i列放j个1和k个2的方案数,这样的复杂度为$O(n^5)$
我们可以把颜色2和颜色3统一看成颜色2,最后方案数乘上$C_{b+c}^b$即可
于是我们考虑如何求出w[x][y]
我们可以再将这两种颜色看为一种,设ddp[i][j]表示在这一列放i个积木,最高高度恰好为j的方案数
不难得出
w[x][y] = $\sum_{i=1}^x$ddp[x+y][i] * $C_{x+y-i}^{x-i}$
至于如何求ddp[i][j]我们可以再数组最后再加以为[0/1]表示是否出现过高度为j的情况
用前缀和优化一下即可使求这个的过程变为$O(n^2)$
代码
#include #include #include #include #include #include #include #include #include #include #include #include #include