出自某模擬賽。
題目大意:
對1e9+7取模。
資料範圍
20 % : n<=300
40 % : n<=2,000
50 % : n<=10,000
70 % : n<=1,000,000
100 % : n<=1,000,000,000
題解
方法眾多。
然而我太蒟了,2h43min愣是寫了乙個40pts暴力走人。
開始指著想正解,但是發現想不出來,然後寫n^2暴力,結果總是要麼漏算要麼算重要麼取模出錯。。。最後才調出來。
$n^3$暴力顯然。然後打表。
$n=1,ans_1=1$
$n=2,ans_2=6$
$n=3,ans_3=24$
$n=4,ans_4=80$
然後,套路的先觀察相鄰兩項的關係。
然後嘗試和項數的下標套上關係。
$ans_2=ans_1\times \frac$
$ans_3=ans_2\times \frac$
$ans_4=ans_3\times \frac$
誒,然後發現了規律!!
可以遞推。
$f_=f_n\times \frac$
$f_=f_n\times \frac$
迭代下去得:
$f_=f_1 \frac$
$f_=\frac\times (n+1)\times(n+2)}$
$f_=\frac\times n\times(n+1)}$
即可出結果
有點意思的是,i+n-i-1=n-1,k-j+j-1=k-1對於任意的i,j恆成立。
這就是突破口
考慮組合數的意義。
$\sum_^n(k\times\sum_^k\sum_^(c_i^\times c_^)$
$=\sum_^n(k\times\sum_^\sum_^k(c_i^\times c_^)$
j和i換了位置之後,
發現,其實i就是列舉的乙個分割點,
然後對於選擇的k-1個數,在1~i個數中選擇k-j個,
在i+1~n-i-1個數中選擇j-1個。
好像和$c_^$有些關係。
發現,對於$c_^$中的每個方案。
其實都可以找出0~n-1這n個分界點,然後統計一次。
每個方案被統計了n次。
所以,原式
$=\sum_^nk\times n\times c_^$
已經可以o(n)遞推了。
我們可以用剛才的打表中方法,搞出遞推式,然後迭代出來通項公式。
即可o(logn)求解。
這個可是組合數啊!!不是一般的數。
組合數畢竟有實際的意義。
觀察這個式子的組合意義。
$\sum_^nk\times n\times c_^$
這個k-1和k,n有點麻煩。
提出來:
$=n\times (\sum_^n(k-1)\times c_^)+n\times 2^$
第乙個括號裡面是什麼意義?
對於n-1個數的集合中,所有子集的大小的和。
套路地,我們轉化研究物件。
考慮每個元素被統計了幾次。
就是:$2^=2^$
因為每個數自己必須出現一次,然後其他的數愛出現不出現。
所以,$=n\times( (n-1)\times2^)+n\times 2^$
然後就可以o(logn)計算了。
0.這個式子,我們嘗試用數學知識、組合數公式化簡,發現不容易化簡。然後就要考慮組合數的意義。
1.組合數是乙個有意義的數。這樣的數學式子的推導,可以通過尋找式子的意義來進行化簡。
往往起到立竿見影的效果。
2.打表找規律,要考慮把結果,遞推關係和項的編號放在一起。
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
數學 組合數學
mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...
組合數學筆記
從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...