这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就要有一些人出来守护居民们不被魔物侵害.魔法使艾米莉就是这样的一个人.她骑着她的坐骑,神龙米格拉一起消灭干扰人类生存的魔物,维护王国的安定.艾米莉希望能够在损伤最小的前提下完成任务.每次战斗前,她都用时间停止魔法停住时间,然后米格拉他就可以发出火球烧死敌人.米格拉想知道,他如何以最快的速度消灭敌人,减轻艾米莉的负担.

Input

数据有多组,你要处理到EOF为止.每组数据第一行有两个数,n,m,(1<=n,m<=15)表示这次任务的地区范围. 然后接下来有n行,每行m个整数,如为1表示该点有怪物,为0表示该点无怪物.然后接下一行有两个整数,n1,m1 (n1<=n,m1<=m)分别表示米格拉一次能攻击的行,列数(行列不能互换),假设米格拉一单位时间能发出一个火球,所有怪物都可一击必杀.

Output

输出一行,一个整数,表示米格拉消灭所有魔物的最短时间.

Sample Input

4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
2 2
4 4
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0
2 2

Sample Output

4
1好久不见得中文题,可谓一股清流啊,由于刚接触舞蹈链说实话只是刚刚会套个模板而已,但看到这个题就蒙了,因为对于如何构造矩阵一头雾水,在翻阅了多个大神博客后才晓得以所给矩阵中的1为列(当然需要给1标号),然后以所给攻击范围的规模大小的矩阵为行,刚开始还不太明白,但后来明白了,其实如何确定矩阵很简单,首先咱们在模板的原型中要明白是找出几行然后使得每列中至少含有一个1(覆盖所有列),然后咱们再分析本题,本题是问最少攻击几次能把敌人全部消灭,每次攻击是一个给定规模的矩阵,所以简单点看就是让我们找最少的矩阵能覆盖所有1,那么矩阵的行列就好确定了,矩阵为行,1为列ac代码:#include <vector>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const int maxn=260;
int L[maxn*maxn],R[maxn*maxn],U[maxn*maxn],D[maxn*maxn];//节点的上下左右四个方向的链表
int C[maxn*maxn],H[maxn],cnt[maxn],vis[maxn];//C列H行cnt列链表中元素个数
int n,m,id,fans;
void init(int ll){for(int i=0;i<=ll;i++){cnt[i]=0;U[i]=D[i]=i;L[i+1]=i;R[i]=i+1;}R[ll]=0;id=ll+1;memset(H,-1,sizeof(H));
}
void Link(int r,int c){cnt[c]++;C[id]=c;U[id]=U[c];D[U[c]]=id;D[id]=c;U[c]=id;if(H[r]==-1) H[r]=L[id]=R[id]=id;else{L[id]=L[H[r]];R[L[H[r]]]=id;R[id]=H[r];L[H[r]]=id;}id++;
}
void Remove(int Size){for(int j=D[Size];j!=Size;j=D[j])L[R[j]]=L[j],R[L[j]]=R[j];
}
void Resume(int Size){for(int j=D[Size];j!=Size;j=D[j])L[R[j]]=R[L[j]]=j;
}
int h(){int sum=0;memset(vis,0,sizeof(vis));for(int i=R[0];i;i=R[i]){if(vis[i]) continue;sum++;for(int j=D[i];j!=i;j=D[j]){for(int k=R[j];k!=j;k=R[k])vis[C[k]]=1;}}return sum;
}
void Dance(int k){int mm=maxn,pos;if(k+h()>=fans) return;if(!R[0]){if(k<fans) fans=k;return;}for(int i=R[0];i;i=R[i])if(mm>cnt[i]) mm=cnt[i],pos=i;for(int i=D[pos];i!=pos;i=D[i]){Remove(i);for(int j=R[i];j!=i;j=R[j]) Remove(j);Dance(k+1);for(int j=R[i];j!=i;j=R[j]) Resume(j);Resume(i);}
}
int A[20][20],B[20][20];
int main(){int u,v,len,wid;while(scanf("%d%d",&n,&m)!=-1){int kk=0,kkk=1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&A[i][j]);if(A[i][j]==1) B[i][j]=(++kk);//给1编号}scanf("%d%d",&len,&wid);init(kk);for(int i=1;i<=n-len+1;i++){for(int j=1;j<=m-wid+1;j++){for(int k=0;k<len;k++){for(int l=0;l<wid;l++){if(A[i+k][j+l]==1) Link(kkk,B[i+k][j+l]);}}kkk++;//矩阵个数}}fans=kkk-1;Dance(0);printf("%d\n",fans);}return 0;
}

fzu-神龙的难题 舞蹈链之可重复覆盖相关推荐

  1. HDU 4735 舞蹈链可重复覆盖

    点击打开链接 题意:给一个树和边权,然后树上的每个节点都有一个男孩或女孩,若有一个男孩的位置与一个女孩的位置的距离小于等于D,则这个女孩安全,现在可以换任意两个节点的人,问最少换多少次所有女孩都安全 ...

  2. FZU 1686 神龙的难题(重复覆盖问题舞蹈链)

    题目链接:[kuangbin带你飞]专题三 Dancing Links D - 神龙的难题 题意 Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是 ...

  3. FZU Problem 1686 神龙的难题(舞蹈链)

    Problem 1686 神龙的难题 Accept: 860    Submit: 2548 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Pro ...

  4. FZU 1686 神龙的难题(DLX反复覆盖)

    FZU 1686 神龙的难题 题目链接 题意:中文题 思路:每个1看成列,每个位置作为左上角的矩阵看成行.dlx反复覆盖就可以 代码: #include <cstdio> #include ...

  5. dancing links(舞蹈链)——求解精准覆盖及重复覆盖问题

    以下转自:https://blog.csdn.net/the_star_is_at/article/details/53425736 问题描述: 给定一个n*m的矩阵,有些位置为1,有些位置为0.如果 ...

  6. hdu 2295 Radar DLX 重复覆盖问题

    http://acm.hdu.edu.cn/showproblem.php?pid=229 题意: 一个国家有n个城市,m个雷达,我们同时操作的雷达数最多为k,给出城市与国家的坐标,求小于等于k的操作 ...

  7. hdu 2298 Radar 重复覆盖

    #include <bits/stdc++.h> using namespace std; struct DLX {const static int maxn=64,maxm=64,max ...

  8. ACM练级日志:HDU 4735(ACM 成都网络赛) 重复覆盖与DLX

    今天费了一下午+一晚上的劲,终于把重复覆盖问题给解决了.作为这算法的牺牲品的就是成都网络赛让我知道DLX这东西存在的那道题,HDU 4735.这也是第一次尝试独立对问题构造矩阵然后调用DLX得出结果的 ...

  9. HDU 3498 whosyourdaddy(Dancing_Links重复覆盖)

    题目地址 题意:给你n个城市,m条道路,每次摧毁一个城市会附带把与它直接连接的城市的摧毁,一个城市可以重复摧毁(如果不能重复就是精确覆盖了),问你最少摧毁多少个城市能把所有城市摧毁. 思路:我们可以构 ...

最新文章

  1. Oracle发布Solaris 11 for Sparc/x86
  2. centos 部署mysql5.7_centos7部署MySQL 5.7
  3. 通过java.net.URLConnection发送HTTP请求
  4. Python3安装turtle提示错误:Command python setup.py egg_info failed with error code 1
  5. 手册-网站-仙客传奇团队博客
  6. Android Studio 生成*.aar文件及使用方法
  7. ARM:让Mali带来更极致的移动VR体验
  8. FreeRTOS 配置文件
  9. SpreadJS V15.0 Update2 新特性一览
  10. 辽东学院计算机练习,辽东学院计算机应用基础课件.doc
  11. Vue.js开发基础 05
  12. 生信分析用python还是r_生信分析利器:JupyterLab
  13. 行人重识别论文阅读6-低分辨率的行人重识别研究
  14. 香港拼音--汉字对照表
  15. 轻便提示插件tipTip
  16. 2019年安徽省模块七满分多少_2019年安徽中考总分是多少 考试科目及分值
  17. java ee框架技术进阶式教程_《JavaEE框架技术进阶式教程》新版任务式教案
  18. 表情分析计算机,利用深度学习和计算机视觉进行面部表情分析
  19. 地面三维激光扫描仪在火灾现场调查取证中的应用
  20. 2021年最新WHQL认证申请流程

热门文章

  1. NCBI SRA数据库
  2. win10远程桌面连接服务器接示内部错误。
  3. Grand Theft Auto V (侠盗列车手5)图形研究
  4. 首先为人编写程序,其次才是计算机
  5. 52个python基础代码,你全都知道吗?
  6. 人人开发--知识点记录
  7. 《数据结构》单链表操作实验报告
  8. MOS管和三极管到底有什么区别
  9. python字典由什么组成_python字典
  10. (一)【Matlab】Matlab基础知识