给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.
Input
第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100).
Output
每行输出网格中有多少个矩形.
我的傻逼之处在于,总把简单的问题想的太复杂。或者说,我不愿意去想更简单的方法,就是一条死路走到底,只会战术上的勤奋。
这道题以点为单位遍历很方便,我却活生生做成了动归。
#include<stdio.h>
#include<iso646.h>
#include<limits.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<ctype.h>
using namespace std;
int a[101][101];
int f(int n,int i)
{
if(i==1) return ((n*n+n)/2);
else return(f(n,i-1)+((n*n+n)/2)+((i-1)*n)+((n-1)*n*(i-1)/2));
}
int main(void)
{
int t,i,j,m,n;
scanf("%d",&t);
for(i=1;i<100;i++)
a[i][1]=(i*i+i)/2;
for(i=0;i<t;i++)
{
scanf("%d %d",&n,&m);
for(j=2;j<100;j++)
a[m][j]=a[m][j-1]+((m*m+m)/2)+((j-1)*m)+((m-1)*m*(j-1)/2);
printf("%d\n",a[m][n]);
}
return 0;
}