题意
有1到M编号的教室,第一节课教室i有Xi个人上课,每个人第一节课的教室编号小于等于第二节课的教室编号,教室i最大容纳数量Yi,Yi>=Xi,求不同的方案数。
题解
先不管第一节课的方案数量,最后再乘就行了,先假设已经安排好了第一节课求第二节课的方案数。
f[i][j]表示安排好了前i个教室,已经安排了j个人的方案数。
假设Xi的前缀和为Si,那么:
f[i][j]=sum({Comb(Si-j+k,k)*f[i-1][j-k] | k>=0&&k<=Yi&&k<=j})
即前i-1个教室已经选好j-k了个人,再从Si-j+k的备选池里选出来k个人放到教室i。
Trick
可以提前用组合数递推公式计算Comb矩阵避免写高精度。