(2012-04-24 21:38:48)
soj3082:
這道題的題意是說,給出一排長度為n的格仔,現在使用m種顏色對n個格仔塗色。要求:相鄰的格仔不同色並且m種顏色都要使用。給出n,m,求塗色的方案數。
剛開始我考慮用遞推公式來做,但是推不出來而且n的範圍是10^9,m的範圍是10^3也不能用表來存。後來看了題目分類是容斥原理。
解題如下:
其實可以這樣考慮:將n個物品放入m個箱子中,任乙個箱子不能為空而且兩個相鄰的物品不能放入同乙個箱子。設總數s表示不存在相鄰的兩個物品放入同乙個箱子,集合
整理得,result=
由於m只有1000,所以只需算出每個
模19871118再求和即可。
**如下:
#include#includeusing namespace std;
#define max 105
#define base 10000
int a[505][1005];//存放c(m,k)
long long mod[1005];//存放c(m,k)mod19871118
void multiply(int a,int max,int b)
}void divide(int a, int max, int b)
}void combinatorics(int m)
for(i=0;i<=m/2;i++)
return b;
} int symbol(int xiaoye)
long long ye(long long x,long long y,long long z)
int main()
{ int n,m;
while(scanf("%d%d",&n,&m)==2)
{ if(m>n)//m>n直接輸出0
{ cout<<0<
容斥原理 分糖(SOJ 747)
分糖 題目描述 有 n 個 相同的 糖果,m 個 不同的 小朋友。m 和 n 滿足 1 m n 100000 105 要求 1.每個小朋友都至少有乙個糖果。2.不存在正整數 x x 2 使得每個小朋友的糖果數都是 x 的倍數。3.糖果不能剩餘。求分糖方法總數。答案模 1000000007 109 7...
容斥原理 數論
兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...
容斥原理,反演
大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...