**** **** 建筑物|DP
题意:给定\(R\)、\(G\)、\(B\)三种颜色块的个数,与\(N\times N\)的方格。求有多少种方案,使得前面看,所有方块的颜色相同。答案mod \(10^9+7\)
\(0\le R,G,B <26 ,1\le N<26\)
题解:
计数类问题,考虑\(DP\)。
首先,设对于第\(i\)列,前面总共放了\(R' ,G' ,B'\)的方案为\(f[i][R'][G'][B']\),则有
\(f[i][R'][G'][B']=\sum f[i][R''][G''][B'']*G[R'-R''][G'-G''][B'-B''] (R''\le R',G''\le G',B''\le B')\)
其中\(G\)为一列内,使用r、g、b个方块的方案数
那么现在来求\(G\)。
设\(s[i][R'][G'][B'][h]\)为一列中,前\(i\)行放置\(R',G',B'\)个,且最高的高度为\(h\)的方案数
则\(G[R'][G'][B']=\sum_{k=1}^{maxheight} s[N][R'][G'][B'][k]\)
显然,\(maxheight\)由决定的那一个颜色的个数决定。
这样做时间复杂度是\(O(N^8)\),会t掉
有没有更好的方法?
我们可以颜色分为需要在前面看到的颜色与另外的两种颜色。将其称作\(Co\)与\(other\)
则上面的数组都可以省掉一维,求\(s\)时枚举减少两维,则时间复杂度为\(O(N^6)\)
这样做显然不对,由于把两种颜色(假使为\(c1 ,c2\))合了起来,所以最后答案应乘上$ C_{c1+c2}^{c1}$