题目:
给你 n 笔订单,每笔订单都需要快递服务。
请你统计所有有效的 收件/配送 序列的数目,确保第 i 个物品的配送服务 delivery(i) 总是在其收件服务 pickup(i) 之后。
由于答案可能很大,请返回答案对 10^9 + 7 取余的结果。
算法:
方法一:数学。
假设n的序列数为P(n),
对于序列:P1,P2,D1,D2,新增一个快递3,可以选择
1.P3,D3连续放在一起,2(n) + 1个区间,选一个放,共有种情况。
2.P3,D3不连续放在一起,共有种情况(选两个格子出来,我总是把P放在D前面)。
n+1序列数总共P(n + 1) = P(n) * ( + )。根据递推公式求结果即得到答案。
func countOrders(n int) int {
ans := 1
mod := 1000000007
for i := 2; i <= n ; i ++ {
a := 2 * i - 1
b := a * (a - 1) / 2 + a
ans = (ans * b) % mod
}
return ans
}