切換
舊版
前往
大廳
主題

ZeroJudge - d898: 10128 - Queue 解題心得

Not In My Back Yard | 2019-03-13 12:50:51 | 巴幣 2 | 人氣 315

題目連結:


題目大意:
第一列給定一正整數 T (1 ≦ T ≦ 10, 000),代表接下來有 T 列輸入。每列輸入有三個整數 N (1 ≦ N ≦ 13)、 P 、 R ,代表有 N 個身高各不同的人排成一列,從一端往另一端看只能看到 P 個人,從另一端看只能看到 R 個人。

求有多少排列方式可以滿足以上的情形。



範例輸入:
3
10 4 4
11 3 1
3 1 2


範例輸出:
90720
1026576
1


解題思維:
因為 P 、 R 沒有給定範圍,所以 < 1 或是 > N 的都不合法,直接輸出「0」。

假設我們已知有 i 個人時,從一端看有 j 個人,另一端有 k 個人(以下稱 Di,j,k)的方法數。並再假設新進來的人比這 i 個人都還要矮。
則可觀察出:
當新的人沒有排在兩端,方法數有 (i - 1) × Di,j,k
當新的人排在可看見 j - 1 人的那端,此端可見的人變為 j 個。
當新的人排在可見 k - 1 人的另一端,則彼端可見變為 k 個人。
所以的 Di+1,j,k 方法數總結以下為:
(i - 1) × Di,j,k + Di,j - 1,k + Di,j,k - 1

而我們已知, D1,1,1 的方法數為 1 種。(其他先預設為 0 種)所以可以推得其他的情況。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作