每日总结2021.4.23

1.洛谷 P1074 [NOIP2009 提高组] 靶形数独

(大意:给定一个9*9的方格,有0-9的数字,在0的位置填上1~9的数字,保证每行,每列,每个3 *3方格中每个数字出现一次,此外,完成数独会有一个分数,分数的计算方式:每个位置有固定的分数,类似于打靶,越中间分数越大,求所有位置的数乘以该位置的分数的和的最大值。)

思路:不考虑分数就是Acwing上面的数独,但是考虑分数怎么办? 一开始想错了,想的是从最里面开始从大数开始放,其实没这么麻烦,纪录一个全局最大值就行了,每次找到一种可行方案就更新下最大值。就爆搜嘛,别难为自己。

数独的剪枝 (1)巧妙之处:位运算优化,因为每次要看哪个位置能填哪个数,要考虑行、列、单元格,还要考虑哪个数字,很麻烦。但想到总共就9个数字,每个数字能填不能和不能填两种状态。 嗯 ? 状态压缩?1表示能填,0表示不能填,考虑该位置能不能填某个数,只需要把行、列、单元格的状态&运算就行了。1代表该数字能填。但是我们填数是每次都去找哪个位置是1会重复很多次寻找,所以想到通过预处理,把某个状态的什么位置是1先找好,mp[1<<i]=i; 这样只需要利用 lowbit运算就可以很快找到要填的数字是几?(2)优化搜索顺序:每次优先搜索分支较少的点,即每次优先搜索可填的数较少的点,自然想到预处理出每种状态中1的个数。(3)可行性剪枝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值