计算网格,我们可以先考虑只有一行的情况。

1、只有1方格个的时候是1

2、2个的时候是2个小方格,大方格包含在1的小方格里面,已经计算过了,所以是2+1

3、3个的时候是3个小方格,大方格包含在1和2的小方格里面,已经计算过了,所以是3+2+1

4、4个的时候是4个小方格,大方格包含在1和2和3的小方格里面,已经计算过了,所以是4+3+2+1

......

依次类推是一个等差数列求和的公式,可得ans=(1+n)*n/2;

而刚刚我们只考虑了行的情况,列的情况依次类推,可得ans=(1+n)*n/2 * (1+m)*m/2;

所以答案就出来了。


题目:飞机票直达(C - 递推

Memory: 1728 KB
Time: 0 MS
Language: C++
Result: Accepted
#include <iostream>
#include <cstdio>
using namespace std;
int x, n, m;
int main()
{
    scanf("%d", &x);
    while(x--)
    {
        scanf("%d%d", &n,&m);
        printf("%d\n", (1+n)*n/2*(1+m)*m/2);//横的乘以竖的
    }
    return 0;
}