これはちょっと…。
https://community.topcoder.com/stat?c=problem_statement&pm=14902
問題
H*Wの次元グリッドが与えられる。
一部のマスは埋まっている。
周縁部のどこかの空きマスを始め、隣接マスを順にたどり、各空きマスを1回ずつ辿って最後周縁部のマスで止まるような移動順は何通りあるか。
解法
H*Wの上限が20と小さいので、移動履歴の有無をbitmaskで持ち、あと現在位置を加えて状態を持てばO(HW*2^(HW))で計算できる。
ll dp[1<<20][20];
class TheRectangularCityDiv2 {
public:
long long find(vector
int H=city.size();
int W=city[0].size();
ZERO(dp);
int mask=0;
int y,x;
FOR(y,H) FOR(x,W) if(city[y][x]=='#') mask |= 1<<(y*W+x);
FOR(y,H) FOR(x,W) if(city[y][x]=='.' && (y==0 || y==H-1 || x==0 || x==W-1)) dp[mask | (1<<(y*W+x))][y*W+x]=1;
FOR(mask,1<<(H*W)) {
FOR(y,H) FOR(x,W) if(dp[mask][y*W+x]) {
if(y&&(mask&(1<<*1][(y-1)*W+x] += dp[mask][y*W+x];
if(y
if(x&&(mask&(1<<(y*W+x-1)))==0) dp[mask | (1<<(y*W+x-1))][y*W+x-1] += dp[mask][y*W+x];
if(x
まとめ
これは悩みどころがないし、Div2 Hardとしても安易すぎでは…。