傳送門
題意:有n層,每層a[i]個位置,m個顏色。每個位置可以選擇乙個顏色。要求相鄰顏色不相同,相鄰兩層顏色集合不完全相同。求方案數。
發現a[i]最大5000,直接n方預處理。
根據套路設
列舉第i位是否啟用新顏色得到
然後再來考慮很多層。
設如果不管相鄰限制,
然而相鄰不能完全相同。那就直接減去
所以遞推。
#includeusing namespace std;
#define in read()
#define int long long
int in
const int n=1000000,m=5003;
int g[m][m],f[2][m],n,m,mod,vis[n+3],prime[n+3],cnt,c[m],a[n+3],maxx,box[n+3];
void seive(int x,int inv)
void prepare1() }}
void prepare2()
}void prepare3()
signed main()//cout<
} cout<
return 0;
}
校內模擬 長壽花(組合數學DP)
簡要題意 有 n nn 層架子,第i ii層上有a ia i ai 個位置,一共有m mm種可用顏色,你需要給所有位置染色並滿足下列限制 同層相鄰位置不染同色 相鄰兩層的所用顏色集合,在去重之後不相等。問你有多少種方案。模數任意。其實這道題讓人考場上不太想做的唯一原因就是模數任意。設coe f i ...
合法括號序列(dp 組合數學)
鍵盤上有左括號 右括號 和退格鍵 共三個鍵。牛牛希望按鍵n次,使得輸入的字串恰好乙個合法的括號序列。每按一次左括號 字串末尾追加乙個左括號 每按一次右括號 字串末尾追加乙個右括號 每按一次退格鍵 會刪掉字串的最後乙個字元,特別的,如果字串為空,牛牛也可以按退格,但是什麼都不會發生。輸出方案數對p取模...
NOIP模擬 排隊(組合數學)
在成都某中學有m個男生與n個女生排隊,這個學校的女生比較古怪,從某個位置 包含這個位置 開始往前數,男生的數量超過了女生的數量,女生會感覺不安全,於是會大叫起來,為了構建和諧校園,安排隊伍時應該避免這樣的情況。請你計算出不會引發尖叫的排隊方案的概率。排隊方案不同定義 當且僅當某個某個位置人不一樣,如...