PTA 禮尚往來 遞推

2021-10-10 04:10:30 字數 1327 閱讀 3250

吉哥還是那個吉哥,那個江湖人稱「嘰嘰哥」的基哥。每當節日來臨,女友眾多的嘰嘰哥總是能從全國各地的女友那裡收到各種禮物。有禮物收到當然值得高興,但回禮確是件麻煩的事!無論多麻煩,總不好意思收禮而不回禮,那也不是嘰嘰哥的風格。現在,即愛面子又摳門的嘰嘰哥想出了乙個絕妙的好辦法:他準備將各個女友送來的禮物合理分配,再回送不同女友,這樣就不用再花錢買禮物了!假設嘰嘰哥的n個女友每人送他乙個禮物(每個人送的禮物都不相同),現在他需要合理安排,再回送每個女友乙份禮物,重點是,回送的禮物不能是這個女友之前送他的那個禮物,不然,嘰嘰哥可就攤上事了,攤上大事了…現在,嘰嘰哥想知道總共有多少種滿足條件的回送禮物方案呢?

輸入資料第一行是個正整數t,表示總共有t組測試資料(t <= 100); 每組資料報含乙個正整數n,表示嘰嘰哥的女友個數為n( 1 <= n <= 100 )。

312

4

0

19

這題不要盲目去解,一開始我就是這樣,結果太複雜了,還寫不出通項式,後來重新分析發現是個遞推題。

設dp[n] 就表示n個人的方案

如下圖,共有n個人,第乙個位置(a)給除a以外的(n - 1) 人中的其中一人,則可有(n - 1)個選擇,餘下n - 1人中,有n - 2 人是有重複的,現在先假設這n - 1人全部是有重複的,即假設f = a,那麼這n - 1人一共就有dp[n - 1]種方案,顯然如果直接這麼計算,少算了a 在 f 位置的次數,現在把a直接放在f位置,餘下n - 2 個位置,全部是有重複的n - 2 個,即dp[n - 2],綜上有:

dp[n] = (n - 1) * (dp[n - 1] + dp[n - 2]); 結果在對p取餘即可。