(A) .分解质因数然后套约数个数公式
(B).sb贪心
(C).
良心计数dp.
设(f_{i,j})为用前(j)个人,分到了人数为(i)的组的方案。
转移式子:
[f_{i,j}=f_{i-1,j}+sum_{k=C}^{D} f_{i-1,j-ik} imes C_{n-(j-ik)}^{ki} imes G_{i,k}
]
其中(G_{i,k})表示(ik)个人分(k)组,每组(i)个人的方案数。
这玩意枚举一个(r),然后算(sum_{ki-ri}^{i}),最后除以(k!)就行了。
初值(f_{A-1,0}=1),(Ans=f_{B,n})。
看起来是(O(n^3))的,但其实这个枚举(k)是个调和级数。所以是(O(n^2ln_n))
(D).
妙妙ds
答案显然是一段区间(l)~(r)用每个票最优的烧烤店和减去(l,r)的路程
我们从(n)到(1)枚举(l),统计(tans_r)为右端点的最优答案。
考虑每次(l)减少一位,答案的变化就是之前某个票移动到当前位。
那么就是当前点往右延伸找到第一个大于此点的位置(p)。(l)~(p)的都可以用这张票代替。
这个可以单调栈,退栈和入栈要用到可以区间加的(ds),例如(Bit)。
但其实我们可以直接用个差分数组,查的时候从前往后累加即可。
时间复杂度:(O(n(n+m)))