文章目录
简单
I - IHI’s Homework
传送门
题意:给定 n , s , q,再给定n 个数,称为 a 数组,你需要构造一个长度为 n 的数组 b,对于所有的 i,令 b[i] >= a[i],且 sum(b) <= s。
q 组询问,输入 x 和 y,将 a[x] = y,问 b 数组的方案数。
做法:对于每次修改,都定义一个 k = s - sum(a),代表当前可用的点数。
k < 0:不可能构造成功
k == 0:只有一种方案
k > 0:可以转化成将 k 个小球放入 n 个盒子里,小球相同盒子不同,盒子可以为空,用一种比较好理解的方法解释,现在我总共有 n + k 个东西,我需要从中选择 n 个盒子,两个盒子直接的球为前一个盒子里的球,这样就可用选择出所有方案 C(n + k, n),但是需要注意两点:
如果 k 个小球必须全部用完:那么按照上述方法,这 n + k 个东西第一个东西必须为盒子,否则前几个球就不属于任何盒子,就浪费掉了,所以应该是 C(n + k - 1, n - 1)。
如果 k 个小球不必全部用完:即 C(n + k, n)。