http://acm.bjtu.edu.cn/problem/detail?pid=1621

(1)总矩形数:考虑1行n个,由一个、两个、三个......1*1正方形组成的方法数为n、n-1、n-2......1,和为(n+1)*n/2

(2)正方形数:n*m的矩形,不妨设n<m,则最大的矩形为n*n,这样的矩形根据乘法原理有1*(m-n+1)个,依次考虑(n-1)*(n-1)......1*1的矩形,方法数同理可得

另附HDU 2524 矩形A+B,与此题一个思路,不过只考虑(1)罢了

http://acm.hdu.edu.cn/showproblem.php?pid=2524

View Code
#include <stdio.h>
#define max(a,b) (a)>(b)?a:b
#define min(a,b) (a)<(b)?a:b
int main()
{
int t,n,m,p,g,h,k;
int nCase;
int s;
nCase=1;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
p=n*(n+1)*m*(m+1)/4;
g=max(m,n);
h=k=min(m,n);
s=g-h+1;
while(1)
{
if(h==1)break;
h--;
s+=(g-h+1)*(k-h+1);
}
printf("Case #%d: %d %d\n",nCase++,s,p-s);
}
return 0;
}