1. 程式人生 > >伯努利錯裝信封問題

伯努利錯裝信封問題

格式 不同 body 算法 所有 情況 輸入格式 blog 復制

題目描述

某人寫了n封信和n個信封,如果所有的信都裝錯了信封。求所有信都裝錯信封共有多少種不同情況。

輸入輸出格式

輸入格式:

一個信封數n(n<=20)

輸出格式:

一個整數,代表有多少種情況。

輸入輸出樣例

輸入樣例#1:?復制

2

輸出樣例#1:?復制

1

輸入樣例#2:?復制

3

輸出樣例#2:?復制

2

解:伯努利錯裝信封問題,公式上!

f(n)=(n-1)*(f(n-1)+f(n-2))

(n表示信封數)

【算法分析】首先,f(0)=1, f(1)=0, f(2)=1

當n>2時,設第一封信裝在第二個信封中 (有n-1種方法)

此時若第二封信裝在第一個信封中,則剩下的即為n-2錯排問題 (f(n-2)種方法)

若第二封信不裝在第一個信封中,把第二封信看作與第一個信封為一套

(與錯排意思相同),剩下的即為n-1錯排問題 (f(n-1)種方法)

得出公式:f(n)=(n-1)*(f(n-1)+f(n-2))(n表示信封數)

伯努利錯裝信封問題