单点时限: 1.5 sec
内存限制: 1024 MB
我们继续来学小学数学。小学生都会做这样一个题:给一个 $n \times m$ 的网格,一开始在 $(0,0)$,每次只能向上向右走一步,问有多少种不同的方案到达 $(n,m)$?
相信这道题一定难不倒作为大学生的你。但作为善良的出题人,你若解决了这个问题,你就能获得 30 分。
对于初中生而言,我们就可以解决三维的情况,有一个 $n \times m \times p$ 的网格,一开始在 $(0,0,0)$,每次只能向前向上向右走一步,问有多少种方案到达 $(n,m,p)$?
相信这道题同样难不倒作为大学生的你。但作为善良的出题人,你若解决了这个问题,你能获得 60 分。
我们不妨将这个问题一般化,在一个超空间中,有一个零点,和一个给定点 $(x_1,x_2,\ldots,x_n)$。一开始有 $\vec{y} = (0,0,\ldots,0)$,每次操作可以选择 $1 \le i \le n$,然后对 $\vec{y}$ 的某一维加 $1$。问有多少种不同的方案使得 $\vec{y}$ 最终变成 $(x_1,x_2,\ldots,x_n)$。
第一行一个整数 $n$。
第二行 $n$ 个整数,用空格隔开,分别为 $x_1,x_2,\ldots,x_n$ $(x_i \ge 0)$。
部分分约定:
输出一个整数表示方案数。由于答案可能很大,对 $998~244~353$ 取模。
2 0 5
1
2 1 1
2
2 4 3
35
3 1 1 1
6