全錯位排列來自於裝信封問題。
瑞士數學家尤拉按一般情況給出了乙個遞推公式:
用a、b、c……表示寫著n位友人名字的信封,a、b、c……表示n份相應的寫好的信紙。把錯裝的總數為記作f(n)。假設把a錯裝進b裡了,包含著這個錯誤的一切錯裝法分兩類:
(1)b裝入a裡,這時每種錯裝的其餘部分都與a、b、a、b無關,應有f(n-2)種錯裝法。
(2)b裝入a、b之外的乙個信封,這時的裝信工作實際是把(除a之外的)(n-1 )份信紙b、c……裝入(除b以外的)n-1個信封a、c……,顯然這時裝錯的方法有f(n-1)種。
總之在a裝入b的錯誤之下,共有錯裝法f(n-2)+f(n-1)種。a裝入c,裝入d……的n-2種錯誤之下,同樣都有f(n-2)+f(n-1)種錯裝法,因此:
f(n)=(n-1)
公式可重新寫成 f(n)-nf(n-1)=-[f(n-1)-(n-1)f(n-2)] (n>2)
於是可以得到
f(n)-nf(n-1)=-[f(n-1)-(n-1)f(n-2)]
=((-1)^2)[f(n-2)-(n-2)f(n-3)]
=((-1)^3)[f(n-3)-(n-3)f(n-4)]
=……
=[(-1)^(n-2)][f(2)-2f(1)]
最終得到乙個更簡單的遞推式 f(n)=nf(n-1)+(-1)^(n-2)
或者等價式 f(n)=nf(n-1)+(-1)^(n) n=2,3,4……
#include
#include
#include
#include
#include
#include
#include
#define inf 1e9
#define maxn 10005
#define mod 1000000007
using
namespace
std;
typedef
long
long ll;
ll solve(int n)
return s2;
}int main()
return
0;}
ZZULIOJ 1524 小P上考場
時間限制 1 sec 記憶體限制 128 mb 提交 132 解決 31 提交 狀態 討論版 命題人 外部匯入 題目描述 小p一覺醒來發現天已經亮了。今天是程式設計大賽的日子,小p需要盡快趕往考場。小p家在a號路口,他會告訴你哪些路口是相聯通的,距離是多少。賽場在b號路口,該市道路沒有單行道。小p想...
ZZULI 1867 禮上往來 錯排
time limit 1 sec memory limit 128 mb submit 216 solved 65 submit status web board 每當節日來臨,女友眾多的 總是能從全國各地的女友那裡收到各種禮物。有禮物收到當然值得高興,但回禮確是件麻煩的事!無論多麻煩,總不好意思收...
ZZULIOJ 1302 海軍節上的鳴炮聲計算
在海軍節開幕式上,有a b c三艘 要同時開始鳴放禮炮各n響。已知a艦每個a秒放一次,b艦每隔b秒放一次,c艦每隔c秒放一次。假設各炮手對時間的掌握非常準確,請程式設計計算觀眾總共可以聽到幾次炮聲。輸入n,a,b,c的值,所有輸入不大於10000。輸出乙個整數,代表觀眾聽到的禮炮聲總數。21 7 6...