
反转
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
POJ3276-Face The Right Way
这是一道反转开关问题,想让所有的牛都面朝前方,令F为0, B为1,给定一个k值,可以从最左端的牛开始,如果这头牛面朝后方,那么以这头牛为开始往后的k头牛的区间都应该反转,再以下一头牛为起点,以此类推… 用f[i]记录以i为起点的牛是否反转,反转为1,否则为0. 同时用sum记录第i头牛的反转情况,如果sum为奇数则与原方向相反,用sum与原方向相加即可得出是否需要反转。 当所有区间都反转完毕后原创 2016-08-04 09:51:32 · 262 阅读 · 0 评论 -
POJ1176-Party Lamps
这道题里有四个按钮,分别为1234,按钮按两次以上是无效的,因此每个按钮只有按和不按。另外按钮存在如下等式: 1+2=3 1+3=2 2+3=1 1+2+3=0 因此最终只会留下八种状态,将最终的八种状态按二进制顺序排列并枚举这八种状态判断即可。 先做出最终的状态,然后不断“改变复原”直到按钮次数变为c次。 注意只按4和都不按的两种情况,当c为2时是无法“改变复原”的。#include原创 2016-08-16 16:03:30 · 366 阅读 · 0 评论 -
POJ3279-Fliptile
这道题是一道反转的开关问题,可以先指定一行的翻转方法,这样每个格子只有它下方的格子能够改变它的颜色。 这道题可以用DFS搜索,也可以用枚举来做。 第一行的状态有2^n次,因此该算法的复杂度为O(mn2^n),反转题的关键在于明白某个格子在被多次翻转后的状态以及检查翻转后剩下的最后一行是否全白。#include <cstdio>#include <cstring>const int maxm =原创 2016-08-07 16:38:31 · 266 阅读 · 0 评论 -
POJ3185-The Water Bowls
反转问题是一种很有意思的题。 首先观察这一排碗中第一个碗,只有第二个碗能改变第一个碗的方向,因此以此类推我们就可以得出解。 枚举第一个碗是否需要翻转,取操作数最小的一个。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int bowl[25];int f[25]; //记录区间[原创 2016-08-08 15:09:27 · 321 阅读 · 0 评论 -
POJ1222-EXTENDED LIGHTS OUT
反转开关问题,枚举第一行的状态然后从第二行开始翻转即可。#include <cstdio>#include <cstring>const int dx[] = {-1, 0, 0, 0, 1};const int dy[] = {0, -1, 0, 1, 0};int map[8][8];int f[8][8];int get(int x, int y) { int c = map[x原创 2016-08-08 15:58:27 · 234 阅读 · 0 评论 -
POJ1753-Flip Game
反转题的开关问题都很有意思!(前提是我做得出的….) 有一个4*4的矩阵,通过翻转使它的颜色一致,求最小的步数。 一开始以为全为黑色,GG….. 枚举第一行的反转状态就行啊。#include <cstdio>#include <cstring>const int dx[5] = {-1, 0, 0, 0, 1};const int dy[5] = {0, -1, 0, 1, 0};char原创 2016-09-16 18:24:58 · 253 阅读 · 0 评论 -
UVa11464-Even Parity
类似于反转问题,枚举第一行即可。#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 20;const int inf = 400;int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, -1, 0, 1};int grid[maxn][maxn];int flip[max原创 2016-09-20 18:15:25 · 303 阅读 · 0 评论