ims*_*rch 5 algorithm permutation
有班级的M学生N,A[i]是来自的学生人数class_i,sum(A[i]) == M.所有这些学生将坐在一排M座位,同一班级没有2名学生坐在一起.
这些M学生可以连续坐多少个有效的方法?
例如,如果N = 2,A = {1,2},则输出应为2;
如果N = 2,A = {1,3},则输出应为0;
如果N = 3,A = {1,2,3},则输出应为120.
技术规格:N <47; A [i] <47; 总和(A)<447;
如果输出大于1000000007,则输出(结果%1000000007).
这个解决方案可能不是最佳的,但我认为这是一个好的开始。
这个问题有两个组成部分:
最终答案等于X*Y。
第 2 部分非常简单。Y = A(1)!A2)!...*一个)!
不过,计算第一部分很棘手。可以用DP来解决。复杂度 = N*A(1) A(2) ...*A(N) (这对我来说太贵了)
DP问题是:
F(a1,a2,..,an,last_letter=1) = F(a1-1,a2,..,an,last_letter!=1)+F(a1,a2-1,..,an,last_letter!=1)+F(a1,a2-1,..,an,last_letter! =1)+...+F(a1,a2,..,an-1,last_letter!=1)