博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 1686 神龙的难题 (重复覆盖)
阅读量:7043 次
发布时间:2019-06-28

本文共 3708 字,大约阅读时间需要 12 分钟。

Problem 1686 神龙的难题

Accept: 397    Submit: 1258
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

 

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

 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

 Source

FOJ月赛-2009年2月- TimeLoop

 

 

题目链接:http://acm.fzu.edu.cn/problem.php?pid=1686

 

重复覆盖模板题。

1为列,可以操作的为行

 

1 /* ***********************************************  2 Author        :kuangbin  3 Created Time  :2014/5/27 17:53:47  4 File Name     :E:\2014ACM\专题学习\DLX\FZU1686.cpp  5 ************************************************ */  6   7 #include 
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 using namespace std; 20 const int MaxM = 15*15+10; 21 const int MaxN = 15*15+10; 22 const int maxnode = MaxN * MaxM; 23 const int INF = 0x3f3f3f3f; 24 struct DLX 25 { 26 int n,m,size; 27 int U[maxnode],D[maxnode],R[maxnode],L[maxnode],Row[maxnode],Col[maxnode]; 28 int H[MaxN],S[MaxM]; 29 int ansd; 30 void init(int _n,int _m) 31 { 32 n = _n; 33 m = _m; 34 for(int i = 0;i <= m;i++) 35 { 36 S[i] = 0; 37 U[i] = D[i] = i; 38 L[i] = i-1; 39 R[i] = i+1; 40 } 41 R[m] = 0; L[0] = m; 42 size = m; 43 for(int i = 1;i <= n;i++)H[i] = -1; 44 } 45 void Link(int r,int c) 46 { 47 ++S[Col[++size]=c]; 48 Row[size] = r; 49 D[size] = D[c]; 50 U[D[c]] = size; 51 U[size] = c; 52 D[c] = size; 53 if(H[r] < 0)H[r] = L[size] = R[size] = size; 54 else 55 { 56 R[size] = R[H[r]]; 57 L[R[H[r]]] = size; 58 L[size] = H[r]; 59 R[H[r]] = size; 60 } 61 } 62 void remove(int c) 63 { 64 for(int i = D[c];i != c;i = D[i]) 65 L[R[i]] = L[i], R[L[i]] = R[i]; 66 } 67 void resume(int c) 68 { 69 for(int i = U[c];i != c;i = U[i]) 70 L[R[i]] = R[L[i]] = i; 71 } 72 bool v[MaxM]; 73 int f() 74 { 75 int ret = 0; 76 for(int c = R[0]; c != 0;c = R[c])v[c] = true; 77 for(int c = R[0]; c != 0;c = R[c]) 78 if(v[c]) 79 { 80 ret++; 81 v[c] = false; 82 for(int i = D[c];i != c;i = D[i]) 83 for(int j = R[i];j != i;j = R[j]) 84 v[Col[j]] = false; 85 } 86 return ret; 87 } 88 void Dance(int d) 89 { 90 if(d + f() >= ansd)return; 91 if(R[0] == 0) 92 { 93 if(d < ansd)ansd = d; 94 return; 95 } 96 int c = R[0]; 97 for(int i = R[0];i != 0;i = R[i]) 98 if(S[i] < S[c]) 99 c = i;100 for(int i = D[c];i != c;i = D[i])101 {102 remove(i);103 for(int j = R[i];j != i;j = R[j])remove(j);104 Dance(d+1);105 for(int j = L[i];j != i;j = L[j])resume(j);106 resume(i);107 }108 }109 };110 DLX g;111 112 int a[20][20];113 int id[20][20];114 115 int main()116 {117 //freopen("in.txt","r",stdin);118 //freopen("out.txt","w",stdout);119 int n,m;120 while(scanf("%d%d",&n,&m) == 2)121 {122 int sz = 0;123 memset(id,0,sizeof(id));124 for(int i = 0;i < n;i++)125 for(int j = 0;j < m;j++)126 {127 scanf("%d",&a[i][j]);128 if(a[i][j] == 1)id[i][j] = (++sz);129 }130 g.init(n*m,sz);131 sz = 1;132 int n1,m1;133 scanf("%d%d",&n1,&m1);134 for(int i = 0;i < n;i++)135 for(int j = 0;j < m;j++)136 {137 for(int x = 0;x < n1 && i + x < n;x++)138 for(int y = 0;y < m1 && j + y < m;y++)139 if(id[i+x][j+y])140 g.Link(sz,id[i+x][j+y]);141 sz++;142 }143 g.ansd = INF;144 g.Dance(0);145 printf("%d\n",g.ansd);146 }147 return 0;148 }

 

 

 

 

 

 

 

转载地址:http://hsqal.baihongyu.com/

你可能感兴趣的文章
JavaScript函数详解(二)
查看>>
spark INFO log
查看>>
grails 找模板或视图
查看>>
Linux脚本编程中常用的知识点(二)
查看>>
X9BYOD集群界面展示
查看>>
WebsitePanel部署指南
查看>>
Python 字符串格式化 (%操作符)
查看>>
C++右值引用
查看>>
win7远程桌面连接不上,解决办法
查看>>
优秀设计师是怎样炼成的?转自站酷 – 自由的猞猁 创作
查看>>
H3C 路由交换机配置文件备份方法
查看>>
我的友情链接
查看>>
阿里开源的 java 诊断工具—— Arthas
查看>>
编写可读代码的艺术 -- 读书笔记
查看>>
应用程序池配置隔离
查看>>
RHEL 7服务控制
查看>>
工具控
查看>>
网摘-U盘装XP,U盘装Ubuntu
查看>>
DOS符号的问题
查看>>
更换一个国内的yum源
查看>>