Back to Leetcode

Readme

Dynamic_Programming/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Readme.md

latest925 B
Original Source

2209.Minimum-White-Tiles-After-Covering-With-Carpets

令dp[i][j]表示前i个格子用j块地毯覆盖,留有的最小白色区域。显然我们分两种情况讨论。

  1. 如果第i个格子我们不用第j块地毯,那么我们会关注前i-1个格子用j块地毯的覆盖情况,再加上第i个格子本身是否是白色。即dp[i][j] = dp[i-1][j] + (s[i]=='1')
  2. 如果第i个格子我们用了第j块地毯,那么这块地毯覆盖了carpetLen的区域。为了尽量节约使用地毯,我们必然希望这块地毯的效用最大化,也就是说,我们必然会把前j-1块地毯用来覆盖前i-carpetLen个格子。故dp[i][j] = dp[i-carpetLen][j-1].

我们在以上两种方案中取最大值。

需要注意的是在第二种情况里,如果i-carpetLen<=0怎么办?容易判断,在没有任何格子的情况下,所谓“留有的白色区域”自然也是0。