1. 程式人生 > >三維積木 - dp

三維積木 - dp

題目大意:
有三種顏色的大小相同的正方形積木各A,B,C個,你要在一個n*n大小的地盤上搭起這些積木,問有多少種搭積木的方案使得其主檢視只有一種顏色。
對1e9+7取模。A,B,C,n<=25。

題解:
考慮列舉哪一個顏色在最前面,剩下兩個沒有本質區別(算完後乘一個組合數)。每一列獨立,做一個卷積即可得到。因此考慮每一列的情況。
現在要計算某一列放a個1和b個2的答案,列舉高度h,那麼正面看去恰好h個1,因此先擺出高度恰好為h的方案,然後欽定這看到的h個是1,剩餘的隨意組合。
高度恰好為h的方案,相當於n個變數的和等於a+b並且每個數值不超過h並且存在至少一個數值是h。第三個限制可以忽略,就是個經典容斥了。這部分O(n^3)。
複雜度O(n^5),可以用NTT優化第一部分的卷積。