poj 1942 組合數問題

2021-06-18 01:37:51 字數 686 閱讀 8686

本題很簡單,但處理方法也很特殊,用double來存中間結果,神!

同樣的公式,不同的處理方法,效果不同。 如:選擇n時一定選小的,節約時間。

處理階乘有三種辦法:

(1)       傳統意義上的直接遞迴,n的規模最多到20+,太小了,在本題不適用,而且非常慢

(2)       稍快一點的演算法,就是利用log()化乘為加,n的規模雖然擴充套件到1000+,但是由於要用三重迴圈,一旦n規模變得更大,耗時就會非常之嚴重,時間複雜度達到o(n*m*(n-m)),本題規定了n,m用unsigned int32型別,就是說n,m的規模達到了21e以上,鐵定tle的。而且就算拋開時間不算,還存在乙個致命的問題,就是精度損失隨著n的增加會變得非常嚴重。

因為n有多大,就要進行n次對數運算,n規模一旦過大,就會丟失得非常嚴重了。所以這種方法是絕對不可取的,因為中途的精度丟失不是簡單的四捨五入可以挽回的。

(3)       拆分階乘,逐項相除,再乘以前面所有項之積。這種方法用乙個迴圈就ok了,時間複雜度只有o(n-m),非常可觀。

#include#include#include#include#include#includeusing namespace std;

int main()

printf("%.0f\n",ans);

}return 0;

}

POJ 1850 1496 組合數學

poj 1496 word index poj 1850 code 題意 1.每個詞是自增的 2.同樣長度的詞是按字典序排練的 3.我們把這些詞標序 求某個詞的序號 分析 組合數學.推出公式然後用楊輝三角打錶出組合數,具體看 我還是太弱orz.1496 author illuz file 1496....

poj3252 組合數學

題意 給出乙個範圍,然後問這個範圍內有幾個是round number round number也就是轉化二進位制後,的個數大於等於 的個數 思路 這是乙個組合計數的問題 我們拿乙個二進位制長度為 的數舉例子 如果長度為 那麼所有長度為 以下的數字,肯定都是在範圍內的,那麼我們就要找出所有符合條件的數...

poj3252組合數學

題意 乙個數轉換成二進位制數,零的個數大於等於一的個數的數稱為圓數,例如9轉換成1001,0的個數為2,1的個數為2,所以9為圓數 輸入兩個數start和end,問start到end有多少個圓數。思路 start到end中有多少個圓數,我們只需要求出num 0,start 和num 0,end nu...