ACcoders Problem 2058 题解

您所在的位置:网站首页 accoders ACcoders Problem 2058 题解

ACcoders Problem 2058 题解

2024-07-10 06:39| 来源: 网络整理| 查看: 265

题意

我们要填一个数独,每行每列每个九宫格都将 1 1 1 到 9 9 9 填入且不重复。如上图,越靠近中间得分越高,每个格子的得分为所填的数值与每个格子的基本得分的乘积,问得分最大为多少。

思路

我们先考虑爆搜,其中引入两个参数,分别为当前没填的格子的数量 c n t cnt cnt 和最终的得分 s c o r e score score。如果 c n t cnt cnt 为 0 0 0,那么就更新答案,与 s c o r e score score 取最大值。每次枚举没填过的数值,然后填入数独,进行下一轮搜索,之后回溯。这样一定会超时,我们考虑剪枝。

剪枝1:顺序剪枝

每次我们都找出没填的选择分支最少(行列九宫格没填的数最少)的空格来填,使其搜索范围缩小,优化时间复杂度。

剪枝2:二进制优化

我们先构造出来三个数组 r o w row row、 c o l col col 和 c e l l cell cell,表示当前行列九宫格内所表示的状态,填过数表示 0 0 0,没填过表示 1 1 1(下标为填的数的数值)。因为一开始都是没有被填过,所以为 111111111 111111111 111111111,即为 ( 1 < < 9 ) − 1 (1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3