#include #include #include using namespace std; const int maxn=22; const int oo=11234567; int n,m,k; bool mp[maxn][maxn]; int sum[maxn][maxn]; int d[maxn][maxn][maxn][maxn]; inline int getsum(int ax,int ay,int bx,int by) { return sum[bx][by]-sum[ax-1][by]-sum[bx][ay-1]+sum[ax-1][ay-1]; } inline bool err(int x,int y) { return x<1||x>n||y<1||y>m; } int dp(int ax,int ay,int bx,int by) { if(err(ax,ay)||err(bx,by)||ax>bx||ay>by) return 0; int &res=d[ax][ay][bx][by]; if(res>-1) return res; if(getsum(ax,ay,bx,by)==1) return res=0; if(getsum(ax,ay,bx,by)<1) return res=oo; res=oo; for(int i=ax;i