题意:
4*4的城市,2*2的云层。被云层覆盖的区域当天一定会下雨。有些区域在某些天不能下雨,并且不能有城市连续7天不下雨。
云层开始在(1,1),(1,2),(2,1)(2,2),每天可以向4个方向移动1或2格或者不动,问是否能满足条件。
思路:
首先,判断是否有城市连续7天不下雨只需判断4个角即可。
云的位置用左上角坐标表示。
所以判重就可以用:
bool vis[366][9][7][7][7][7]; //第i天,云的位置在j,4个角的连续不下雨天数
因为只有16个区域,可以用一个int数表示。
判断当前状态是否满足条件:
((1 << (4 * x + y)) | (1 << (4 * x + y + 1)) | (1 << (4 * (x + 1) + y)) | (1 << (4 * (x + 1) + y + 1))) & days[i]
其中x,y为云层的位置,days[i]为第i天的条件。
完整代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace st