运用动态规划,不难推导,输入整数对(m,n)其返回值F(m,n)应该是m阶等差数列的第n项。m与n的作用完全对称,F(m,n)同样也是n阶等差数列的第m项。代码见下:

#include<iostream>
#include<vector>
using namespace std;

size_t F(size_t m, size_t n)
{
    size_t m_ = max(m,n);
    size_t n_ = min(m,n);
    vector<size_t> v(n_+1,1);
    for (size_t p = 1; p<=m_; ++p)
        for (size_t q = 1; q<=n_; ++q)
            v[q] += v[q-1];
    return v.back();
}

int main(void)
{
    size_t m,n;
    while(cin>>m>>n)
        cout<<F(m,n)<<endl;
}

而事实上,F(m,n)构成了杨辉三角,故利用杨辉三角通项公式可知:

F(m,n) = (m+n)!/m!/n!

所以,也可直接使用阶乘函数进行运算。代码见下:

#include<iostream>
using namespace std;

size_t factorial( size_t n)
{
    size_t p = 1;
    for(size_t k=1; k<=n; ++k)
        p*=k;
    return p;
}

int main(void)
{
    size_t m,n;
    while(cin>>m>>n)
        cout<< factorial(m+n)/factorial(m)/factorial(n)<<endl;
}