【解题报告】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]中取最大值