總結我只是個小蒟蒻,所以數論證明方面嘛....
..比較感性,可能不嚴謹
倘若有哪些大佬發現有bug
bugbu
g,那歡迎提醒我
因為在週末比賽時遇上了一道jzoj 4786...
..結果冒出來一堆野雞,貼公式乙個比乙個熟練,但對於證明卻只口未提
所以為了方便各位,便在感悟後mar
kmark
mark
下設有n
nn個小球,m
mm個箱子
設f [i
][j]
f[i][j]
f[i][j
]表示在有j
jj個箱子的情況下放入i
ii個小球的方案數
我們開始考慮動態轉移方程:
我們從限制入手:允許有空箱。即可有可無,對於無的情況,假設有j
jj個箱子,我們大可以在操作前先保證每個箱子內有1
11個球,所以要放入的球就從i
ii變成i−j
i-ji−
j;對於有的情況,就很好考慮了。因為可以有空箱,那麼就直接加上乙個箱子,讓i
ii個小球自己去排(因為之前的dpdp
dp必定會使其有解)。
現在動態轉移方程便呼之欲出了:
f[i][j]=f[i][j-1 ]+f[i-j][j](i>=j) \\ f[i][j]=f[i][j-1 ](i
^mf[n][i]
ans=∑i
=1m
f[n]
[i]
因為不能存在空箱的情況,也就是說我們只有讓m
mm個箱子都有球才符合,所以按照上一種的方法dpdp
dp,統計答案時就直接是f[n
][m]
f[n][m]
f[n][m
] 對於n
nn個球來說,就會存在n−1
n-1n−
1個位置,而因為我們只有m
mm個箱子,所以只要m−1
m-1m−
1個位置便可以成功的將小球分成m
mm份。但因為可以有空箱,那麼情況就會變得十分特殊,所以我們可以強行新增m
mm個球使得每個箱子都會有球,也就是不存在空箱的情況了,這下就巧妙的將特殊化為一般
所以就變成了在n+m
−1
n+m-1
n+m−
1個位置中選出m−1
m-1m−
1的方案數,即cn+
m−1m
−1
c_^cn
+m−1
m−1
因為一開始就不存在空箱的情況,所以就不需要新增m
mm個虛球,直接用上一種情況一開始提到的就好了,即方案數為cn−
1m−1
c_^cn
−1m−
1這種情況就十分草率了,對於每個球都可以有m
mm個箱子選擇且使得方案不重複
所以解就是n
mn^m
nm讓我們再次回到球不同,箱同,無空箱這種情況,與現在這種情況僅僅差了箱子的不同
那麼我們大膽地嘗試由該種情況直接進行轉移。因為考慮的是箱子,所以我們直接對於結果進行考慮。因為箱子的不同,所以在球數一定的情況下,只要換個箱子都會使得方案數改變,而我們可以換且不會發生重複的方案,恰好是m
mm個箱子的全排列
最終的方案數為f[n
][m]
∗m
!f[n][m]*m!
f[n][m
]∗m!
感覺思考時最大的體會就是賴皮
跟講n im
nimni
m博弈時運用到的反證法一樣,很巧妙,在考慮一種情況時,因為可能會出現特殊情況而導致難度上公升,所以我們直接將球預先放好,對特殊情況進行降難度打擊
關於RMQ問題的四種解法
什麼是rmq問題 rmq range minimum maximum query 對於長度為n的陣列a,回答若干詢問rmq a,i,j i,j n 1 返回陣列a中下標在i,j範圍內的最小 大 值,也就是說,rmq問題是指求區間最值的問題。1.暴力法最簡單的方法,就是遍歷陣列直接搜尋,但是這種方式時...
關於記憶體溢位遇到的兩種情況
1.處理資料的程式或者服務是x86架構的,容易出現記憶體溢位。因為x86的程序,最多允許記憶體4g 在這4g中又有2g是作業系統等 所以當你查詢的資料量非常大的時候,非常容易記憶體溢位。2.多執行緒 容易導致記憶體溢位 溢位原理細節我還不清楚 我查詢mongo資料量,資料按地區分類,我查到a地區有7...
關於HTTP的8種請求方式簡介
有次面試時被問到http除了get和post還有什麼請求方式嗎?除了知道乙個head,真的是一臉懵逼,哎。直接gg。接下來介紹下這8種請求方式 1.get 向特定資源傳送請求,查詢資料 2.post 向指定的資源,提交資料進行處理請求,有可能建立或修改已有資料 3.head 和get請求相一致,只不...