1. 程式人生 > >FZU 1686 神龍的難題 (重複覆蓋)

FZU 1686 神龍的難題 (重複覆蓋)

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 <stdio.h> 8 #include <string.h> 9 #include <iostream> 10 #include <algorithm> 11 #include <vector> 12 #include <queue> 13 #include <set> 14 #include <map> 15 #include <string> 16 #include <math.h> 17 #include <stdlib.h> 18 #include <time.h> 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 }

相關推薦

FZU 1686 神龍難題 重複覆蓋

Problem 1686 神龍的難題 Accept: 397    Submit: 1258Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 這是個劍與魔法的世界.英雄和魔物同在,動盪和

HDU 2295 Radar 重複覆蓋

Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2280    Accepted Submission(s): 897 Problem

[ACM] hdu 1251 統計難題 字典樹

第一次 stdio.h scrip null 明顯 output 代碼 ane 處理 統計難題 Problem Description Ignatius近期遇到一個難題,老師交給他非常多單詞(僅僅有小寫字母組成,不會有反復的單詞出現),如今老師要他統計出以某

HDU 2045 LELE的RPG難題遞推

%d out miss rpg 方式 最終 desc ont != 不容易系列之(3)—— LELE的RPG難題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768

數據結構 集合_集合實例集合覆蓋

不存在 人員 list 組成 elm != 文件 mem 組合數 集合覆蓋是一種優化求解問題,對很多組合數學和資源選擇問題給出了很好的抽象模型。 問題如下:給定一個集合S,集合P由集合S的子集A1到An組成,集合C由集合P中的一個或多個子集組成。如果S中的每個成員都包含在C

阿裏雲彈性裸金屬服務器-神龍架構X-Dragon揭秘

架構摘要: 在5月16日的飛天技術會新品直播中,特別邀請了業界知名大咖狒哥以及阿裏雲虛擬化資深專家旭卿作為現場直播的嘉賓。本次直播主要從產品背景到“X-Dragon架構”,從硬件設備到軟件應用來深度的剖析“X-Dragon架構”為彈性計算裸金屬服務器提供的極致計算能力。在5月16日的飛天技術會新品直播中,特別

HDU1251 統計難題字典樹

lag != tac NPU math def tput struct bee HDU1251 統計難題 Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴)

語句覆蓋、條件覆蓋分支覆蓋、判定覆蓋、條件-判定覆蓋、組合覆蓋、路徑覆蓋 的區別

文章轉自:https://blog.csdn.net/virus2014/article/details/51217026   1語句覆蓋 使所有的判斷語句都能執行一次的條件案例,例如有兩個if語句,那麼就至少需要兩個測試用例   2判定覆蓋(分支覆蓋)

HDOJ-2045 不容易系列之(3)—— LELE的RPG難題遞推

題目:HDOJ-2045 題目描述: 有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法. 思路:(遞推) 這個和 高中數學 學排列組合時遇到的相鄰塗色問題類似,

HDU 2200 Eddy's AC難題排列組合

Eddy's AC難題 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submissi

HDU 1251 - 統計難題 字典樹

Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的

FZU 2150 Fire Game 兩點BFS

題意:兩個熊孩子在n*m的平地上放火玩,#表示草,兩個熊孩子分別選一個#格子點火,火可以向上向下向左向右在有草的格子蔓延,點火的地方時間為0,蔓延至下一格的時間依次加一。求燒完所有的草需要的最少時間。如不能燒完輸出-1。 思路:第一感覺是DFS求連通塊,但想想就感覺不對了。

hdoj2045:LELE的RPG難題遞推

不容易系列之(3)—— LELE的RPG難題 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O

HDU1251統計難題字串處理

Description Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首)

八數碼難題啟發式搜尋

八數碼難題---啟發式搜素1.啟發式搜尋:特點:重排OPEN表,選擇最有希望的節點加以擴充套件種類:有序搜尋(A演算法)、A*演算法等2.估價函式用來估算節點處於最佳求解路徑上的希望程度的函式f(n) = g(n) + h(n) n——搜尋圖中的某個當前被擴充套件的節點;f(

IQ使命2 Barcelona 巴塞羅那色塊覆蓋攻略

IQ使命2  目錄: 本章規則: 就是要用所給的木塊覆蓋陰影區域,而且相鄰的木塊不能同色 (1) (2) (3) (4) (5) (6) 除了第(1)(

hdu2045 不容易系列之(3)—— LELE的RPG難題C語言

Problem Description 人稱“AC女之殺手”的超級偶像LELE最近忽然玩起了深沉,這可急壞了眾多“Cole”(LELE的粉絲,即"可樂"),經過多方打探,某資深Cole終於知道了原因,原來,LELE最近研究起了著名的RPG難題: 有排成一行的n個方格,用

poj 2376區間覆蓋

題目大意:有若干頭牛,每一頭牛都有自己的工作時間段(稱為小區間),現有一個給定的總工作時間段(稱為大區間),要求用最小的小區間數來覆蓋大區間並輸出區間數 分析:該問題的原型就是區間覆蓋問題,首先要對輸入的資料進行排序,排序的標準是:每個區間的開始時間升序,然後開始處理資料

NYOJ房間安排區間覆蓋

描述 2010年上海世界博覽會(Expo2010),是第41屆世界博覽會。於2010年5月1日至10月31日期間,在中國上海市舉行。本次世博會也是由中國舉辦的首屆世界博覽會。上海世博會以“城市,讓生活更美好”(Better City,Better Life)為主題,將

HDU 1251 統計難題字典樹

#include<stdio.h> #include<string.h> struct Node { Node *next[26];//每個節點的分支由單詞性質決定,這裡是小寫的26個字母 int cnt;//每個節點可以儲存一些資訊,這道題是儲存該字首的數量 Node()