【解题报告】VijosP1351 棋盘制作

思路:

1、 矩形:用f[i][j][1]表示右下角为(I,j),最大的,符合条件的矩形的长,用f[i][j][2]表示右下角为(I,j),最大的,符合条件的矩形的高,预设f内所有元素为1

 

If(a[i-1][j]!=a[i][j])&&(a[i][j-1]!=a[i][j])

 

在如上两个色块中取一个面积大的,得到f[i][j][1],f[i][j][2]

 

If(a[i-1][j]==a[i][j])&&(a[i][j-1]!=a[i][j])

F[i][j][1]=f[i][j-1][1]+1;

F[i][j][2]=1;

 

If (a[i-1][j]!=a[i][j])&&(a[i][j-1]==a[i][j])

F[i][j][1]=1;

F[i][j][2]= f[i-1][j][2]+1;

 

If (a[i-1][j]==a[i][j])&&(a[i][j-1]==a[i][j])

F[i][j][1]=f[i][j][2]=1;

 

2、 正方形:

 

可直接利用刚才矩形得到的数据,d[i][j]表示右下角为(I,j)的最大的正方形的边长:

If(a[i-1][j]!=a[i][j])&&(a[i][j-1]!=a[i][j])

d[i][j]=min(f[i-1][j][2]+1,f[i-1][j][1],f[I,j-1][1]+1)

 

else d[i][j]=1;

 

在所有d[i][j]中取最大值

posted @ 2017-03-11 15:43  Nitrate  阅读(149)  评论(0编辑  收藏  举报