一天,媽媽在黑板上畫了乙個大大的圓,然後又在圓弧上標上1,2
,3,...,,2n
個數。然後讓笨笨任意選取一對數(
兩個不同的數
)上連一條直線。然後再任意選取一對數,再邊一條直線,但這條直線不能和任何別的直線相交。每個數都要恰好與另乙個數連一條直線。
笨笨費了好大的勁才找出一種連線方案。媽媽在旁邊問笨笨:給出n
,請問不同的連線方案有多少種呢?
笨笨算不出來,只好請教作為大牛的你。
多組資料,每組資料的格式為:
第1行:
1個整數n(
1<= n <= 150
),表示在圓弧上會標記
2n個數
當輸入的n為0
時,表示輸入結束。
【輸出】
每組輸入對應輸出一行,乙個整數,表示連線的方案數。由於結果太大,只保留模10007
後的餘數。
【樣例輸入】
2 3
0【樣例輸出】
【分析】
考試時,看到這道題,我早已一臉懵逼。於是,也就一臉懵逼地用回朔法來做。但覺得實現難度太大,便放棄了。
實際上,這是一道典型的遞推題。
我們從一號點開始,與最後乙個點相連。那麼,整個圓便被分為兩部分:0個點和n-2個點。
根據乘法原理,這麼連,n個點的連線方案數就是0個點的方案數+(n-2)個點的方案數的乘積。
將這條線向下平移,就可以用同樣的方法,求這麼連的方案數。將它們相加,便是答案。
具體方法如下:
設f(n)為(2 * n)個點的方案數。
則遞推式為:
f(n) = f(0) + f(n - 2) + f(1) + f(n - 2) + ... + f(n - 2) + f(0)
邊界條件為:
f(1) = 1; f(0) = 1(不連便是一種方案)
【程式】
#includeint f[155];
int main()
for(i = c + 1; i <= n; i++)
}printf("%d\n", f[n]);
c = n;
}}
2018程設模考2
a 分別記錄紙幣剩餘數量判斷是否能找零,因為資料比較弱所以對於5 5 5的情況沒考慮也過了。includeusing namespace std int main else else else if flag printf true return 0 b 因為一次只能搬一塊或者兩塊磚頭,所以對於n塊...
模考 2018 03 11 塞克斯斯
塞克斯斯是六兄弟中的老六,他喜歡老大福斯特,他希望福斯特 高興。所以他要幫福斯特寫作業。作業如下 給 n 個正方形,正方形有兩種 a 型 平行於座標軸,中心位於 x,y 邊長為偶數 a b 型 和座標軸成 45 度夾角,中心位於 x,y 對角線長為偶數 d。求這些正方形覆蓋的面積總大小。第一行乙個整...
gmat模考 GMAT備考如何進行模考練習
準備gmat考試的考生,大多會在備考中進行幾次模考練習。模考練習也的確給人回報高和真實度高的印象。老師喜歡模考,因為模考能幫助他們更好的了解學生的學習情況 學生參加模考,是因為模考能讓他們更清晰的認識到自己的優勢和不足。但如何正確使用模考材料,避免低效率浪費寶貴的學習資源和備考時間,讓每次模考都發揮...