P1595 信封問題

2021-10-06 23:59:20 字數 1177 閱讀 6357

題目描述

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

輸入格式

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

輸出格式

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

輸入輸出樣例

輸入 #1

輸出 #1

輸入 #2

輸出 #2

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

long

long f[30]

;int n;

intmain()

看上去這就是乙個遞推問題,那麼遞推式是如何推出來呢? 當 nn 個編號元素放在n個編號位置,元素編號與位置編號各不對應的方法數用 d(n)d(n) 表示,那麼 d(n-1)d(n−1) 就表示 n-1n−1 個編號元素放在 n-1n−1 個編號位置,各不對應的方法數,其它類推.

第一步,把第 nn 個元素放在乙個位置,比如位置 kk ,一共有 n-1n−1 種方法;

第二步,放編號為 kk 的元素,這時有兩種情況:⑴把它放到位置 nn ,那麼,對於剩下的 n-1n−1 個元素,由於第 kk 個元素放到了位置 nn ,剩下 n-2n−2 個元素就有 d(n-2)d(n−2) 種方法;⑵第 kk 個元素不把它放到位置 nn ,這時,對於這 n-1n−1 個元素,有 d(n-1)d(n−1) 種方法;

綜上得到

d(n) = (n-1) *(d(n-2) + d(n-1))d(n)=(n−1)∗(d(n−2)+d(n−1))

特殊地,d(1) = 0, d(2) = 1d(1)=0,d(2)=1.

洛谷 P1595 信封問題

想不到刷普及 的題目還真有收穫 解 伯努利錯裝信封問題,公式上!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 ...

洛谷 P1595 信封問題 遞推 1 2

某人寫了n封信和n個信封,如果所有的信都裝錯了信封。求所有信都裝錯信封共有多少種不同情況。輸入格式 乙個信封數n n 20 輸出格式 乙個整數,代表有多少種情況。輸入樣例 1 2輸出樣例 1 1輸入樣例 2 3輸出樣例 2 2用f i 表示i個數的錯排 第一步 考慮放第n個元素,有n 1種 第二步 ...

錯裝信封問題

先看問題 hdu有個網名叫做8006的男性同學,結交無數,最近該同學玩起了浪漫,同時給n個每人寫了一封信,這都沒什麼,要命的是,他竟然把所有的信都裝錯了信封!注意了,是全部裝錯喲!輸入資料報含多個多個測試例項,每個測試例項占用一行,每行包含乙個正整數n 1對於每行輸入請輸出可能的錯誤方式的數量,每個...