题目大意:给一个H行W列的01矩阵,求最少用多少个正方形框住所有的1.
题目分析:又是一个红果果的重复覆盖模型.DLX搞之!
枚举矩阵所有的子正方形,全1的话建图.判断全1的时候,用了一个递推,dp[i][j][w][h]表示左上角(i,j)的位置开始长h宽w的矩形中1的个数,这样后面可以迅速判断某个正方形是否全1.
不过此题直接搜一直TLE,然后改成迭代加深就比较愉快啦
详情请见代码:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 11;
const int M = 50005;
int dp[N][N][N][N];
int n,m,num,ans;
int mp[N][N];
bool vis[105];
int s[M],h[M],col[M],u[M],d[M],l[M],r[M];
void init()
{
memset(h,0,sizeof(h));
memset(s,0,sizeof(s));
int i,c;
c = m * n;
for(i = 0;i <= c;i ++)
{
u[i] = d[i] = i;
l[i] = (i + c)%(c + 1);
r[