这道题很谔谔。就一阅读理解呗。
本来是想状压DP的,结果懒了。事实上这就是一道组合数学。
题面人话翻译:有和为 (0) 的 (m) 个数 (a_isim a_m),求 (i) 有多少种排列使得任意一个前缀和都大于等于 (0) 。
不能这样直接算,给序列末尾加上一个 (-1) 然后求前 (m) 个前缀和大于等于 (0) 的排列数。
搞一个圆排,每一个圆排只有一种满足的情况,即有且仅有以最小前缀和第一次出现的位置的后一位为开头的排列合法。
我们知道, (m+1) 个数的圆排列的方案数为 (m!) 。由于有 (m!) 种圆排,所以我们有 (m!) 种合法的情况。
然后我们试试去掉我们之前加上的 (-1)。虽然最后一个一定是 (-1) ,但是不一定是我们加上去的 (-1),处理一下我们得到有 (m-n+1) 个元素。
所以答案是
[frac{m!}{m-n+1}
]