一道简单递推题

棋盘格数(chess.pas
§设有一个N*M方格的棋盘(1<=N,M<=100)。求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。例如:当N=2,M=3时:
§正方形的个数有8个:即边长为1的正方形有6个;边长为2的正方形有2个。
§长方形的个数有10个:即2*1的长方形有4个;1*2的长方形有3个;3*1的长方形有2个;3*2的长方形有1个。
§【输入文件】chess.in。一行,nm,中间用一个空格分隔。
§【输出文件】chess.out。一行,正方形的个数和长方形的个数,中间用一个空格分隔。
§【样例输入】:
§2 3
§【样例输出】:
§8 10
自己胡乱推了个式子作了下。。应该是过了。
牛们看看是不是。。
my solution:
var f1,f2:array[1..100,1..100] of longint;
     n,m,i,j:longint;
begin
assign(input,'chess.in'); reset(input);
assign(output,'chess.out'); rewrite(output);
   readln(n,m);
   for i:=1 to m do begin
      f1[1,i]:=i;
      f1[i,1]:=i;
      end;
   for i:=1 to n do begin
      f1[1,i]:=i;
      f1[i,1]:=i;
      end;
   for i:=2 to n do
     for j:=2 to m do
       f1[i,j]:=(i*j)+f1[i-1][j-1];
   write(f1[n,m],' ');
   f2[1,1]:=0;
   for i:=2 to m do begin
       f2[1,i]:=f2[1,i-1]+i-1;
       f2[i,1]:=f2[i-1,1]+i-1;
      end;
   for i:=2 to n do begin
       f2[1,i]:=f2[1,i-1]+i-1;
       f2[i,1]:=f2[i-1,1]+i-1;
      end;
   for i:=2 to n do
     for j:=2 to m do
        f2[i,j]:=i*f2[1,j]+j*f2[1,i]+f2[i-1][j-1];
   writeln(f2[n,m]);
close(input); close(output);
end.

posted @ 2009-01-04 12:42  jesonpeng  阅读(201)  评论(0编辑  收藏  举报