P1169- [ZJOI2007]基板製造

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- 10 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 }

 

おすすめ

転載: www.cnblogs.com/Asurudo/p/11425290.html