1つの#include <ビット/ STDC ++ H> 2 の#defineため_for(iは、B)(INT I =(A); iはB <; iは++) 3 の#define _rep(I、B)のための- (I; I> B iは=(A)INT) 4 の#define INF 0x3f3f3f3f 5 の#define MOD十億七 6のtypedef 長い 長LL。 7 使用して 名前空間はstdを、 8 インライン()読み取りllの 9 { 10 LL ANS = 0 。 11 CHAR CH = GETCHAR()、=最後' ' 。 12 しばらく(!isdigit(CH))最後の= CH、CH =getchar関数(); 13 一方(isdigit(CH))ANS =(ANS << 1)+(ANS << 3)+ CH - ' 0 '、CH = GETCHAR()。 14 であれば(最後== ' - ')ANS = - ANS。 15の リターンANS; 16 } 17インラインボイドライト(LLのX) 18 { 19の 場合(X < 0)は、x = -x、のputchar(' - ' )。 20 であれば(X> = 10)のライト(X / 10 )。 21 のputchar(Xの%10 + ' 0 ' )。 22 } 23 整数N、M。 24 int型 DP [ 2003 ] [ 2003 ]。 25 int型のアップ[ 2003 ] [ 2003 ]; 26 のint LEF [ 2003 ] [ 2003 ]。 27 int型の里[ 2003 ] [ 2003 ]; 28 INT [ 2003 ] [ 2003 ]; 29 のint main()の 30 { 31 N =読み取る()、M = 読み取ります(); 32 _for(I、1、N + 1 ) 33 _for(J、1、M + 1 ) 34 [I] [J] = 読み取ります(); 35 36 _for(J、1、M + 1 ) 37 { 38 [アップ1 ] [J] = 1 。 39 _for(I、2、N + 1 )、 40 であれば([I]、[J] ^ [I- 1 ] [J]) 41 [I] [j]が最大=最大[I- 1 ] [J] + 1 ; 42 他の 43 までの[I] [J] = 1 。 44 } 45 46 _for(I、1、N + 1 ) 47 { 48 LEF [I] [ 1 ] = 1 。 49 _for(J、2、M + 1 ) 50 であれば([I]、[J] ^ [I] [J- 1 ]) 51の LEF [I] [J] = LEF [I]、[J- 1 ] + 1 ; 52 他 53の LEF [I] [J] = 1 。 54 } 55 56 _for(I、1、N + 1 ) 57 { 58 RI [I] [M] = 1 。 59 _rep(J、M- 1、0 ) 60 であれば([I]、[J] ^ [I] [J + 1 ]) 61の RI [I] [J] = RI [I]、[J + 1 ] + 1 ; 62の 他 63 RI [I] [J] = 1 。 64 } 65 66 INTrnt1 = 0 ; 67 _for(I、1、N + 1 ) 68 _for(J、1、M + 1 ) 69 { 70 DP [I] [J] = 1 。 71 であれば(私の== 1 || jは== 1 ) 72 DP [I] [J] = 1 。 73 他の 場合(!([I]、[J] ^ [I- 1 ] [J- 1 ])) 74 { 75 DP [I] [J] =分(DP [I- 1 ] [J- 1] + 1 、分(アップLEF [I]、[J]、[I] [J]))。 76 rnt1 = MAX(rnt1、DP [I] [J])。 77 } 78 } 79 のprintf(" %d個の\ n "、rnt1 * rnt1)。 80 81 INT rnt2 = 0 。 82 _for(I、1、N + 1 ) 83 _for(J、1、M + 1 ) 84 { 85 であれば(I> 1 && [I]、[J] ^ [I- 1 ] [J]) 86 { 87の LEF [I] [J] =分(LEF [I- 1 ] [j]は、[I] [j]をLEF)。 88の RI [I] [J] =分(RI [I- 1 ] [j]は、RI [I] [j]を)。 89 } 90 rnt2 = MAX(最大rnt2、[I] [J] *(RI [I] [J] + LEF [I]、[J] - 1 ))。 91 } 92 のprintf(" %dの" 、rnt2)。 93 リターン 0 ; 94 }