1. 程式人生 > >HDU 6363 容斥定理

HDU 6363 容斥定理

題目連結

題意:
n個相同的小球放入k個不同的箱子,箱子可以為空。假設對於一個方案,cnt[i]表示第i個箱子中的小球數,則該方案的價值為:gcd(2Fib[cnt[1]]1,2Fib[cnt[2]]1,2Fib[cnt[3]]1,...,2Fib[cnt[k]]1),其中Fib[]為斐波那契數列,問所有方案價值的期望是什麼?

思路:
首先通過打表可以發現:

gcd(2Fib[cnt[x]]1,2Fib[cnt[y]]1)=2Fib[gcd(cnt[x],cnt[y])]1

即一個方案的價值其實等價於求出k個箱子中小球數量的gcd,記為g,則方案價值為:

2Fib[g]1

此時可以考慮容斥:
dp[i]表示g=i的方案數
G[i]表示gi的倍數的方案數。

顯然gn的約數
則求解G[i],本質上是將n/ii分到k個箱子中,箱子可以為空,而此問題是一個經典的組合數學題,由隔板法得:

G[i]=Cn/i+k1k1

又由容斥定理,得:

dp[i]=G[i]i|jandj|ndp[j]

則最終答案為: