深度优先搜索只要当前枚举到的状态可行.pptVIP

  • 0
  • 0
  • 约1.23万字
  • 约 47页
  • 2019-08-02 发布于天津
  • 举报

深度优先搜索只要当前枚举到的状态可行.ppt

搜索与回溯一个最简单的想法我们可以从左上角到右下角枚举每一个未填上的格子再枚举它可以放哪些数字将它填上后继续搜索当所有格子都填上后计算一下总分如果总分大于当前最优值就更新最优值这样大约可以得分我们还可以对上面的想法进行改进我们可以先计算出每个格子的选择数先确定可选择数小的格子即先把只有一种选择的格子确定下来再确定有两种选择的格子从而避免搜索到过多无法得到可行方案的状态这样大约可以得分对于这道题由于数据的原因如果从右下角到左上角枚举可以得到分左右如果再加上一个叫做卡步的东西我们可以得到分什么是卡步

搜索与回溯 一个最简单的想法: 我们可以从左上角到右下角枚举每一个未填上的格子,再枚举它可以放哪些数字,将它填上后继续搜索。当所有格子都填上后,计算一下总分,如果总分大于当前最优值就更新最优值 这样大约可以得35分 我们还可以对上面的想法进行改进: 我们可以先计算出每个格子的选择数 先确定可选择数小的格子 即先把只有一种选择的格子确定下来 再确定有两种选择的格子 …… 从而避免搜索到过多无法得到可行方案的状态 这样大约可以得75分 对于这道题,由于数据的原因,如果从右下角到左上角枚举,可以得到90分左右。 如果再加上一个叫做卡步的东西,我们可以得到100分。 什么是卡步? 我们发现搜到一个可行的方案是很快的,时间主要用于更新最优解。卡步就是当执行的步数到达一定值时,若程序还没有结束,那么我们就直接输出搜到的最优解,并退出。这个值很有可能不是最优的,但若继续搜索下去必然会超时,所以我们直接退出。这是在比赛中常用的技巧。 如何卡步? 最简单的办法就是在过程dfs中加入 inc(p);if p… then begin writeln(ans);halt; end; 本题可以用搜索+卡步得到100分,很重要的原因是这道题测试数据的特殊性。 如果要使程序能通过任何数据,可以采用位运算加速搜索和Dancing-links,但这两种方法在联赛范围内基本不会出现,我们不进行深入讨

文档评论(0)

1亿VIP精品文档

相关文档