P1985 [USACO07OPEN]翻转棋 题解

博客介绍了USACO07OPEN翻转棋问题,给出两种算法:一是暴力枚举,时间复杂度较高;二是优化策略,仅枚举第一行,通过递推出所有格子的翻转状态,实现字典序最小的方案,时间复杂度为O(2m×n×m)。
摘要由CSDN通过智能技术生成

博客园同步

原题链接

简要题意:

给定一个 01 01 01 棋盘,每次可以翻转一个“十”字形(即一个格子连同它四方向的相邻格子,出界则不翻)。求在哪些格子上翻转(十字形的中心)可以使得 翻转后全 0 0 0 且 方案字典序最小

首先 n , m ≤ 15 n,m \leq 15 n,m15,本着面向数据范围做题的原理,分析算法。

算法一

枚举翻转哪些格子进行验证。

时间复杂度: O ( 2 n × m × n × m ) O(2^{n \times m} \times n \times m) O(2n×m×n×m),难以接受这样的爆炸性复杂度。

算法二

需要我们分析一下题目。

我们肯定无法枚举 n n n 行所有的翻转情况,但我们可以枚举 1 1 1 行。

  • 什么?枚举 1 1 1 行?

  • 没错,我们只枚举第 1 1 1 行是否翻转。

  • 那么,其它行的怎么办呢?

  • 其实很简单。你想:在 按照行的顺序枚举 的情况下,如果 a i − 1 , j = 0 a_{i-1,j} = 0 ai1,j=0,那么 a i , j a_{i,j} ai,j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值