去題目的傳送門
題面很長,說白了,就是要你求錯排n個數的方案數
表示看完錯排的通項公式的推導過程之後,整個人都不好了。但是這個題不用通項公式,只知道遞推式就好了。
遞推式:f[n]=(n-1)*(f[n-1]+f[n-2])
來一波遞推式的推導過程:
當n個編號元素放在n個編號位置,元素編號與位置編號各不對應的方法數用d(n)表示,那麼d(n-1)就表示n-1個編號元素放在n-1個編號位置,各不對應的方法數,其它類推.第一步,把第n個元素放在乙個位置,比如位置k,一共有n-1種方法;
第二步,放編號為k的元素,這時有兩種情況:
⑴把它放到位置n,那麼,對於剩下的n-1個元素,由於第k個元素放到了位置n,剩下n-2個元素就有d(n-2)種方法;
⑵第k個元素不把它放到位置n,這時,對於這n-1個元素,有d(n-1)種方法;
綜上得到
d(n) = (n-1) [d(n-2) + d(n-1)]
特殊地,d(1) = 0, d(2) = 1.
**:
#include
#include
#include
#include
using
namespace
std;
int n;
struct hh
f[110];
hh add(hh x,hh y)
return ans;
}hh muti(int x,hh y)
if(ans.a[l+1]) ans.cnt=++l;
else ans.cnt=l;
return ans;
}int main()
return
0;}
演算法 錯排問題
錯排問題 就是一種遞推式,不過它比較著名且常用,所以要熟記!方法一 n各有序的元素應有n!種不同的排列。如若乙個排列式的所有的元素都不在原來的位置上,則稱這個排列為錯排。任給乙個n,求出1,2,n的錯排個數dn共有多少個。遞迴關係式為 d n n 1 d n 1 d n 2 d 1 0,d 2 1 ...
遞迴 錯排公式
這個問題推廣一下,就是錯排問題,是組合數學中的問題之一。考慮乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 研究乙個排列錯排個數的問題,叫做錯排問題或稱為更列問題。錯排問題最早被尼古拉 伯努利和尤拉研究,因此歷史上...
數論 錯排公式
1.定義 乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 2.推導 遞推 首先將第乙個元素錯排,假設將第乙個元素放到第k位,那麼對於第k位的元素,有兩種情況 1.k放在第1位,此時相當於對處第1位與第k位的n 2個...