T1:
数学题。感觉不应该不会。
两种思路:
num[i],珠子个数。sum[i]个数前缀和。
yjc:正着考虑,先放第一种珠子,就1种方案。(码一排)
放第二种,必须先要拿出来一个放在最后。
还有num[i]-1个珠子。用这num[i]-1个珠子分开前面的sum[i-1]个珠子。
相当于插隔板,也就是小球放进箱子里。
有num[i]-1个板,就是num[i]个箱子。放sum[i-1]个小球。每个箱子可以空。求方法数。
每个箱子先垫一个。转化成插板。
就是有sum[i-1]+num[i]=sum[i]个小球。插num[i]-1个板,方案数。
有sum[i]-1个缝隙可以插板,所以方案数是:C(num[i]-1,sum[i]-1)
放完的珠子,不管怎么放,对于后面的珠子来说都是一样的。根据乘法原理乘起来即可。
zyz:倒着考虑。放最后一种珠子。最后一颗必须放在最后一位。
就还有sum[i]-1位置,放num[i]-1个珠子。所以C(num[i]-1,sum[i]-1)
倒数第二种珠子最后一个必须放在最后一个空位上。同理。乘法原理即可。
T2:
N可能很大。
经典矩阵乘法优化dp问题。
转移是固定的。推出转移矩阵。快速幂即可。
其实16x16矩阵就可以。维护轮廓线。
0,0,0,0表示初始情况。0,0,0,1表示最下面凸出一块,上面三个空出来。其他同理。
转移例如,0,0,0,1可以通过放三个横向的骨牌,转移到1,1,1,0
初始只有0,0,0,0有值,最后只统计1,1,1,1就可以了。
T3: