poj2032Square Carpets(IDA* + dancing links)

题目请戳这里

题目大意:给一个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[i] = (i + 1)%(c + 1);}num = c + 1;
}void ins(int i,int j)
{if(h[i]){r[num] = h[i];l[num] = l[h[i]];r[l[num]] = l[r[num]] = num;}elseh[i] = l[num] = r[num] = num;s[j] ++;u[num] = u[j];d[num] = j;d[u[num]] = num;u[j] = num;col[num] = j;num ++;
}
void del(int c)
{for(int i = u[c];i != c;i = u[i])l[r[i]] = l[i],r[l[i]] = r[i];
}
void resume(int c)
{for(int i = d[c];i != c;i = d[i])l[r[i]] = r[l[i]] = i;
}int A()
{int i,j,k,ret;ret = 0;memset(vis,false,sizeof(vis));for(i = r[0];i;i = r[i]){if(vis[i] == false){ret ++;vis[i] = true;for(j = d[i];j != i;j = d[j])for(k = r[j];k != j;k = r[k])vis[col[k]] = true;}}return ret;
}bool dfs(int k,int lim)
{if(k + A() > lim)return false;if(!r[0]){
//        ans = min(ans,k);return true;}int i,j,c,mn = M;for(i = r[0];i;i = r[i]){if(s[i] < mn){mn = s[i];c = i;}}for(i = d[c];i != c;i = d[i]){del(i);for(j = l[i];j != i;j = l[j])del(j);if(dfs(k + 1,lim)) return true;for(j = r[i];j != i;j = r[j])resume(j);resume(i);}return false;
}bool canfuck(int x,int y,int z)
{return dp[x][y][z][z] == z * z;int i,j;for(i = x;i <= x + z - 1;i ++)for(j = y;j <= y + z - 1;j ++)if(mp[i][j] == 0)return false;return true;
}void fuckba(int x,int y,int z,int id)
{int i,j;for(i = x;i <= x + z - 1;i ++)for(j = y;j <= y + z - 1;j ++)ins(id,(i - 1) * m + j);
}
void build()
{int i,j,k;memset(dp,0,sizeof(dp));for(i = 1;i <= n;i ++)for(j = 1;j <= m;j ++)scanf("%d",&mp[i][j]),dp[i][j][1][1] = mp[i][j];for(int ii = 1;ii <= n;ii ++)for(int jj = 1;jj <= m;jj ++){for(i = 1;i + ii <= n + 1;i ++){for(j = 1;j + jj <= 1 + m;j ++){dp[i][j][ii][jj] = dp[i][j][ii - 1][jj - 1] + dp[i + ii - 1][j][1][jj - 1] + dp[i][j + jj - 1][ii - 1][1] + dp[i + ii - 1][j + jj - 1][1][1];}}}init();int rownum = 1;for(k = 1;k <= min(n,m);k ++)//枚举边长{for(i = 1;i <= n - k + 1;i ++){for(j = 1;j <= m - k + 1;j ++){if(canfuck(i,j,k))fuckba(i,j,k,rownum);rownum ++;}}}for(i = 1;i <= n * m;i ++)if(s[i] == 0)l[r[i]] = l[i],r[l[i]] = r[i];
}
void fuck()
{
//    ans = M;TLE....
//    dfs(0);
//    printf("%d\n",ans);ans = 0;while(!dfs(0,ans ++));printf("%d\n",ans - 1);
}
int main()
{while(scanf("%d%d",&m,&n),(m + n)){build();fuck();}return 0;
}


 

 

转载于:https://www.cnblogs.com/riasky/p/3481865.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring Security保护REST服务

总览 最近&#xff0c;我正在一个使用REST服务层与客户端应用程序&#xff08;GWT应用程序&#xff09;进行通信的项目中。 因此&#xff0c;我花了很多时间来弄清楚如何使用Spring Security保护REST服务。 本文介绍了我找到的解决方案&#xff0c;并已实现。 我希望此解决方案…

http请求post,返回excel文件,并接收

1.post的方法里要加responseType: arraybuffer参数&#xff0c;不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法&#xff0c;可以保存为xls格式的excel文件&#xff08;兼容老版本&#xff09;。而使用“application/vnd.openxmlformats-off…

linux图形开发工具

请见:http://hi.baidu.com/jjzhang166/blog/item/b8dfb6ecd5fc6e2d62d09f9e.html 转载于:https://www.cnblogs.com/vilyLei/archive/2011/12/12/2284869.html

具有Overlord的WildFly 8.1中的API管理

昨天&#xff0c;我简要介绍了霸王项目家族。 今天该试驾了。 API管理子项目两天前发布了1.0.0.Alpha1&#xff0c;并根据18个月的路线图介绍了第一组功能。 APIMan到底是什么&#xff1f; 它是一个API管理系统&#xff0c;可以嵌入现有框架或应用程序中&#xff0c;甚至可以作…

设计模式学习笔记-代理模式

1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题&#xff1a;如果直接访问对象比较困难&#xff0c;或直接访问会给使用者或系统带来一系列问题。这样对于客户端&#xff08;调用者&#xff09;来说&#xff0c;就不需要直接与真实对象进行交互&#xff0c…

Tomcat配置自签名https

从JDK中找到keytool.exe&#xff0c;随便复制到一个方便的目录&#xff0c;在命令行中进入这个目录。 第一步&#xff1a;为服务器生成证书 tomcat.keystore&#xff0c;名字就是域名&#xff0c;其他的看着写。 keytool -genkey -v -alias tomcat -keyalg RSA -validity 3650…

MFC学习之路之多媒体 --(1) DirectShow

可以说整个Windows的多媒体编程都是以DirectShow为基础&#xff0c;那好&#xff0c;来吧&#xff0c;我们直接看DirectShow的一段基础代码。 bool Mp3::Load(LPCWSTR szFile) {Cleanup();ready false;if (SUCCEEDED(CoCreateInstance( CLSID_FilterGraph,NULL,CLSCTX_INPROC_…

使用反射处理Java批注

在上一篇有关Java注释的文章中&#xff0c;我概述了一个最近的用例&#xff0c;并为您提供了一些自定义注释的示例以及如何使用它们。 在本文中&#xff0c;我将更进一步&#xff0c;并为您提供一些自定义注释的示例&#xff0c;以及如何使用Java Reflection API处理这些自定义…

Excel 2007 Open XML文件结构(2)

Excel 2007 Open XML文件结构&#xff08;2&#xff09; 在以上文件中&#xff0c;根据<sheet>元素中r:id属性的值可得到工作表数据的XML文件。例如&#xff0c;在workbook.xml文件中名为工作表1的工作表的r:id属性为rld1&#xff0c;在以上文件中根据ID找到以下代码&…

Vue.js最佳实践

Vue.js最佳实践 第一招&#xff1a;化繁为简的Watchers 场景还原&#xff1a; created(){this.fetchPostList() },watch: {searchInputValue(){this.fetchPostList()} } 组件创建的时候我们获取一次列表&#xff0c;同时监听input框&#xff0c;每当发生变化的时候重新获取一…

Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息

本节通过Content Provider机制获取系统中的联系人信息&#xff0c;注意这个Anctivity直接继承的是ListActivity&#xff0c;所以不再需要setContentView函数来加载布局文件了&#xff08;我自己新建一个项目来跑这个anctivity时在这里卡了半天&#xff09;。 在AndroidManifest…

游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1

上一篇我们大致的了解了几种聊天室的行为模式 最简单明了的推模式 几乎不需要任何多余的语言来描述它的实现 这一篇我们看看如何实现拉模式更有效。 本图清晰的表现了"拉"模式聊天室的行为。 并发多用户向数据池写数据 并发多用户从数据池读书据 数据最好以时间为…

开发自上而下的Web服务项目

这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开&#xff1a;在大多数情况下&#xff0c;将类转换为端点只需在代码中添加少量注释即可。 但…

React中ref的使用方法

React中ref的使用方法 在react典型的数据流中&#xff0c; props传递是父子组件交互的唯一方式&#xff1b;通过传递一个新的 props值来使子组件重新 re-render,从而达到父子组件通信。当然&#xff0c;就像react官网所描述的一样&#xff0c;在react典型的数据量之外&#xff…

mediawiki自动生成sitemap

Mediawiki 1.17.0提供了generateSitemap.php生成sitemap文件&#xff0c;可不必再使用扩展。 每次调用generateSitemap.php&#xff0c;生成全部sitemap。一般是通过定时任务(Linux下是cron)调用&#xff0c;定时生成。 generateSitemap.php命令示例&#xff1a; php /wiki/mai…

垃圾收集:提高吞吐量

这篇文章的灵感来自于在内存管理术语中的“ Pig in the Python ”定义。 显然&#xff0c;该术语用于解释GC反复促进大对象世代相传的情况。 据推测&#xff0c;这样做的效果类似于Python吞下整个猎物&#xff0c;只是在消化过程中被固定住了。 在接下来的24小时里&#xff0c…

Scss基础用法

Scss基础用法 一、注释用法&#xff1a; &#xff08;1&#xff09;//comment&#xff1a;该注释只是在.scss源文件中有&#xff0c;编译后的css文件中没有。 &#xff08;2&#xff09;/! /&#xff1a;重要注释&#xff0c;任何style的css文件中都会有&#xff0c;一般放置…

(Joomla)字符串截取

在用joomla进行开发的时候&#xff0c;需要用到国外的资源&#xff0c;一些module&#xff0c;组件&#xff0c;插件之类的&#xff0c;但是我们会发现&#xff0c;在字符串这个方法都需要进行修改。因为PHP的substr方法只是针对于非中文字符串有效&#xff0c;所以要使用另外一…

Pyechart:30分钟学会pyecharts数据可视化

30分钟学会pyecharts数据可视化 小红&#xff1a;你先跟我说说什么是pyecharts吧。 小明&#xff1a;Echarts 是一个由百度开源的数据可视化javascript库&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表…

Spring @Configuration – RabbitMQ连接

我一直在转换必须使用Spring Configuration机制配置到RabbitMQ的连接的应用程序-最初&#xff0c;我使用xml bean定义文件来描述配置。 这是我的原始配置&#xff1a; <beans ...;><context:property-placeholder/><rabbit:connection-factory id"rabbit…