**** **** 建筑物|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}$

posted @ 2019-03-16 22:50  fmj_123  阅读(152)  评论(0编辑  收藏  举报