1樓:DuaiHan1020
排列方法數除了取決於人數,還取決於這些人具體身高差情況。
看你的說法,應該是預設了這些人身高形成等差數列。否則僅確定人數,排列方法數是不定的。比如123和124,排序方法數乙個是4,乙個是6。
但我不知道你的f(4)=10,包括之後的數怎麼算出來的,我看f(4)=18
2樓:靈劍
OEIS的鏈結裡面應該研究得比較清楚了,我簡單寫一下解法
首先這樣的交錯數列中,將第k小的替換成第k大的數,可以將第一步遞增的交錯數列替換成反向交錯的數列,因此兩種交錯方式的數列數量是相等的,因此總的數量是第一步遞增的交錯數列數量的兩倍——除了n=0和n=1的情況,這時候替換之後得到自身,我們規定n=0和n=1時第一步遞增的交錯數列數量為1,總數也是1。除此以外都有這個兩倍的關係。
設長度為n且第一步遞增的交錯數列數量為 ,在 時所有交錯數列總數就是 。考慮這n個數里最小的數,這個數的兩側一定是兩個第一步遞增的交錯數列(左邊的是左右映象過的),窮舉左邊數列的長度可以得到遞推式:
相當於先選擇i個數到左邊構造乙個數列,剩下的在右邊構造數列,總數是兩邊乘積再乘以組合數,最後對i求和,除以2是因為求得的是所有交錯數列,而我們定義f為第一步遞增的交錯數列。
注意到組合數可以寫成階乘的形式
令 ,可以消去階乘符號,變成
再次注意這個式子只對 的情況成立。
這個卷積的形式可以考慮引入母函式來處理。對這個式子兩邊同時乘以 ,得到
對 的項求和
令 ,有
和前面的式子比較可以發現只差k=0的項,也就是
補上n=1的項,注意到 ,有
而右邊的形式實際上是 的導數,於是有
這種非線性的微分方程一般是比較難解的,不過這個平方加一的形式讓我們想到了 ,注意到有
差個1/2的係數怎麼辦呢?調整下x的係數看看
這就對上了,但是G(x)還有初值條件 , 。後者從前面的方程裡倒是可以推出來,主要是前者和 對不上。再新增個常數:
代入初值 ,可以取 ,這樣就可以得到
可以用切割化弦和萬能公式求一下等價的形式
或這兩者不是完全等價的,後者的定義域要更小一些,沒有定義的點從 增加到了 ,不過反正我們只關心0附近的泰勒展開的形式,在這一點上兩者沒有區別。
注意到 是奇函式, 是偶函式,所以 的展開式的奇數項就是 的奇數項,偶數項就是 的偶數項。
遺憾的是 和 的泰勒展開並沒有特別簡單的表示式,查Wikipedia https://
en.wikipedia.org/wiki/T
aylor_series
可以看到的泰勒展開需要用伯努利數表示, 則需要用尤拉數表示,抄過來就有:
注意到這個只是第一步遞增的解法,全部解在 時是這個值的兩倍。可以查一下伯努利數和尤拉數的表對照一下。
具體計算上來說的話,考慮到 ,而 有相對簡單的表示式,可以用多項式求逆的方式求出尤拉數的數值,不考慮高精度運算複雜度的情況下應該可以做到 複雜度。而 的展開式可以利用 用多項式乘法求出來,複雜度也是 。
實際上 也有很明確的意義,就是n個元素任意乙個排列符合第一步遞增然後交錯的條件的概率。 時乘以2就是交錯的概率。
3樓:何樸藩
可以在oeis搜到相關研究。
oeis.org/A001250
我想到乙個動態規劃的解法:
dp[i][j]代表要把1到i這i個數排成交替序列a1a3a5...,且第乙個數只能選1到j,的方案數。
那麼原題在n>1時答案就是dp[n][n]*2,n<=1時特判答案為1。
初始值:dp[0][0] = 1
轉移方程:dp[i][j] = Sum dp[i-1][i-k], k in [1,j]
很容易得到乙個O(n^2)的演算法。n=
100f=[[
0foriin
range(n
+1)]forjin
range(n
+1)]f
[0][0
]=1foriin
range(1
,n+1
):s=0
forj
inrange(1
,i+1
):s+=f
[i-1
][i-j
]f[i
][j]=
sifi==
1:print
('a[1] = 1'
)else
('a[
%d] = %d'
%(i,
f[i][
i]*2))
m個人,n件衣服(n m),將這n件衣服分配給m個人,每個人至少有一件衣服,有多少種分法?
丁克奎 可以先將n件衣服分成m堆,定義n件衣服分成m堆有s n,m 種排列,那麼n 1件衣服就有兩種可能性,一種是分成m堆,那麼剩下的一件衣服,就可以在m堆中選擇,有m種可能,另外一種是分成m 1堆,那麼剩下的一件衣服只能自成一堆,因此n件衣服分成m堆,有s n,m m s n 1,m s n 1,...
Matlab中,有n個1576x4的矩陣,將矩陣每行看作1個2x2矩陣,使n個矩陣對應行相乘怎麼操作?
井中的水 思路 先提取和重塑這些矩陣,然後再以此進行矩陣乘法,然後再進行封裝 用matrix來儲存這個1576 4的矩陣function matrix result matrix func matrix matrix result matrix 1 matrix result reshape mat...
N個球面最多將3維空間分成多少個部分?
羅宇航 初賽難度的組合題,由於本人不會用知乎打公式這裡就簡單說一下思路 先求出平面上面的圓最多把平面分成幾部分 利用遞推來求比較方便 這個是比較容易求得因為圓與圓最多有兩個交點,前n個圓把新加進去的圓的弧分成2n份,每份弧又把原來的區域分成2份,這樣就可以列出遞推方程,就不說了。利用這裡的出來的結論...