Product of binomial coefficients taken two at a time 
What is the value of $r$ for which $$\binom{30}{r}\binom{20}{0} + \binom{30}{r-1}\binom{20}{1} + \ldots +\binom{30}{0}\binom{20}{r}$$ is maximum?

This is how I interpreted it: The above expression is equivalent to choosing $r$ objects from $50$ objects. So it’s value given by $\binom{50}{r}$. Now $\binom{50}{r}$ is maximum at $r=25$ So the answer should be $25$. But actually, the correct answer is $ 20$. How is that possible? And what is wrong with my reasoning? 
 A: Consider
$$\binom{30}{r}\binom{20}{0} + \binom{30}{r-1}\binom{20}{1} + \ldots +\binom{30}{0}\binom{20}{r}
=\binom{50}{r}$$
like you said.
However, notice that the expression is only defined up to $r=20$. We know that $\binom{50}{r}$ is increasing in $r$ for $r<25$. Hence, the maximum value of the expression is that when $r=20$.
A: The formula
$$\sum_{j=0}^r\binom aj\binom b{r-j}=\binom{a+b}r$$
is valid only if $r\le\min\{a,b\}$.
A: This is a long comment.
Given that binomial coefficients whose lower argument exceeds their higher argument are zero but well-defined, Trevor Gunn has a point. I verified the point numerically; the code is below:
using System.Numerics;
BigInteger Binomial(int n, int k) => k < 0 || k > n ? 0 : k == 0 ? 1 : k * 2 > n ? Binomial(n, n-k) : (Binomial(n, k-1) * n)/k;
BigInteger f(int r)
{
    BigInteger result = 0;
    for(int i = 0; i <= r; ++i) result += Binomial(30, i) * Binomial(20, r-i);
    return result;
}
Console.WriteLine(f(20));// 3,347,717,751,371,268
Console.WriteLine(f(25));// 50,335,833,680,826,500

