SSL 1317 海上搜索 状压dp

在南海的某一海面内岛屿和海洋交错衡生,进行海上搜索作业,先对搜索区域的海洋图分割成若干个M×N大小相同的网格,其中M(M<50)表示行,N(N<50)表示列,在网格中以1表示海洋,0表示岛屿(位于纵向或横向相邻的成片数字视为一个岛屿)如图1有3个岛屿,图2有1 个岛屿。

  你的任务是为这次的海上搜索作业确定一个基准区域,所谓的基准区域是指如上图的图像中的一块矩形区域:
  (1)每一个岛屿都有部分面积(网格)在此区域内;
  (2)在满足(1)的条件下,区域面积最小。
  一幅图像中的基准区域可能不是唯一的,但各基准区域面积必定是相同的。

  根据给定的图像,确定其基准区域的面积。 

使用一个数据类型(由于数据太弱,用longint就可以AC)对状态进行压缩,

每一位表示一个岛很像布尔数组

1.      染色,用a[i,j]=0表示海,a[i,j]=2^i表示编号为i的岛屿(i>=0)

2.      然后DP(枚举),

对于每个状态f[i,j,k,l](表示从[i,j]到[k,l]的区域的岛屿数量),有

f[i,j,i,j]:=f[i,j];

f[i,j,i,t]:=f[i,j,i,t-1]or a[i,t];

f[i,j,t,j]:=f[i,j,t-1,j]or a[i,t];

f[i,j,k,l]:=f[i,j,k-1,l]or f[i,j,k.l-1] or a[k,l];

3. 当f[i,j,k,l]=1 shl (s+1)-1 时,代表([i,j],[k,l])中包含所有的岛,然后比较大小并记录。


你可能感兴趣的:(SSL 1317 海上搜索 状压dp)