题目大意:给出3个数a,b,c。可以增加它们的长度,但增加的总长度不能超过l(当然也可以不增加)。求增加后能使它们构成三角形的方案数。
首先根据容斥原理,所求的方案数为总方案数减去不能构成三角形的方案数。
首先求总方案数。可以把l分割成四部分:$l=l_a+l_b+l_c+unused$,即分别分给a,b,c的长度和没有使用的部分,问题转化为求这四个部分非负的情况下使这个等式成立的方案数,用隔板法可以得到方案数为$C^3_{l+3}$。
然后是求不能构成三角形的方案数。先假设$a+l_a$为最长边,之后同样要设另外两条边为最长边,并把三种情况求出的结果加起来。
易得下面两个等式
$a+l_a\ge b+l_b+c+l_c$
$l_a+l_b+l_c\le l$
移项得
$l_b+l_c\le a-b-c+l_a$
$l_b+l_c\le l-l_a$
那么设$x=\min\left( a-b-c+l_a,l-l_a\right)$,就有
$l_b+l_c\le x$
和求总方案数时一样,可以列出$x=l_b+l_c+unused$,得方案数为$C^2_{x+2}$。
最终答案为
$C^3_{l+3}-\\
\sum_{i=0}^l\left( C^2_{\min\left( a-b-c+i,l-i\right) +2}+C^2_{\min\left( b-a-c+i,l-i\right) +2}+C^2_{\min\left( c-a-b+i,l-i\right) +2}\right)$
代码在此。