FZU 1686 神龙的难题

pid=1686" target="_blank" style="">题目链接

题意:中文题

思路:每个1看成列,每个位置作为左上角的矩阵看成行。dlx反复覆盖就可以

代码:

#include <cstdio>
#include <cstring> using namespace std; const int MAXNODE = 66666;
const int INF = 0x3f3f3f3f;
const int MAXM = 230;
const int MAXN = 230;
int K; struct DLX { int n,m,size; int U[MAXNODE], D[MAXNODE], R[MAXNODE], L[MAXNODE], row[MAXNODE], col[MAXNODE];
int H[MAXN], S[MAXM];
int ansd, ans[MAXN]; void init(int n,int m) {
this->n = n;
this->m = m;
ansd = INF;
for(int i = 0; i <= m; i++) {
S[i] = 0;
U[i] = D[i] = i;
L[i] = i - 1;
R[i] = i + 1;
}
R[m] = 0; L[0] = m;
size = m;
for(int i = 1; i <= n; i++)
H[i] = -1;
} void Link(int r,int c) {
++S[col[++size] = c];
row[size] = r;
D[size] = D[c];
U[D[c]] = size;
U[size] = c;
D[c] = size;
if(H[r] < 0) H[r] = L[size] = R[size] = size;
else {
R[size] = R[H[r]];
L[R[H[r]]] = size;
L[size] = H[r];
R[H[r]] = size;
}
} void remove(int c) {
for(int i = D[c]; i != c; i = D[i]) {
L[R[i]] = L[i];
R[L[i]] = R[i];
}
} void resume(int c) {
for(int i = U[c]; i != c; i = U[i])
L[R[i]] = R[L[i]] = i;
} bool v[MAXNODE]; int f() {
int ret = 0;
for(int c = R[0]; c != 0; c = R[c]) v[c] = true;
for(int c = R[0]; c != 0; c = R[c]) {
if(v[c]) {
ret++;
v[c] = false;
for(int i = D[c]; i != c; i = D[i])
for(int j = R[i]; j != i; j = R[j])
v[col[j]] = false;
}
}
return ret;
} void Dance(int d) {
if(d + f() >= ansd) return;
if(R[0] == 0) {
if (d < ansd) ansd = d;
return;
}
int c = R[0];
for(int i = R[0]; i != 0; i = R[i]) {
if(S[i] < S[c])
c = i;
}
for(int i = D[c]; i != c; i = D[i]) {
remove(i);
for(int j = R[i]; j != i; j = R[j]) remove(j);
ans[d] = row[i];
Dance(d + 1);
for(int j = L[i]; j != i; j = L[j]) resume(j);
resume(i);
}
}
} gao; const int N = 20; int n, m, g[N][N], n1, m1, to[N][N]; int main() {
while (~scanf("%d%d", &n, &m)) {
int cnt = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
scanf("%d", &g[i][j]);
if (g[i][j]) to[i][j] = ++cnt;
}
scanf("%d%d", &n1, &m1);
gao.init(n * m, cnt);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int x = 0; x < n1 && i + x < n; x++) {
for (int y = 0; y < m1 && j + y < m; y++) {
if (g[i + x][j + y]) gao.Link(i * m + j + 1, to[i + x][j + y]);
}
}
}
}
gao.Dance(0);
printf("%d\n", gao.ansd);
}
return 0;
}

FZU 1686 神龙的难题(DLX反复覆盖)的更多相关文章

  1. FZU 1686 神龙的难题 DLX反复覆盖

    DLX反复覆盖: 须要一个A*函数剪支 Problem 1686 神龙的难题 Accept: 462    Submit: 1401 Time Limit: 1000 mSec    Memory L ...

  2. FZU 1686 神龙的难题 (重复覆盖)

    Problem 1686 神龙的难题 Accept: 397    Submit: 1258Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  3. FZU 1686 神龙的难题 (DLX)

    神龙的难题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  4. (简单) FZU 1686 神龙的难题 , DLX+可重复覆盖。

    Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就 ...

  5. [ACM] FZU 1686 神龙的难题 (DLX 反复覆盖)

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

  6. HDU 5046 Airport(DLX反复覆盖)

    HDU 5046 Airport 题目链接 题意:给定一些机场.要求选出K个机场,使得其它机场到其它机场的最大值最小 思路:二分+DLX反复覆盖去推断就可以 代码: #include <cstd ...

  7. HDOJ 2828 Lamp DLX反复覆盖

    DLX反复覆盖模版题: 每一个开关两个状态.但仅仅能选一个,建2m×n的矩阵跑DLX模版.. .. Lamp Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  8. [DLX反复覆盖] hdu 2828 Lamp

    题意: 有N个灯M个开关 每一个灯的ON和OFF状态都能控制一个灯是否亮 给出N行,代表对于每一个灯 哪些开关的哪个状态能够使得第i个灯亮 思路: 这里须要注意一个问题 假设开关1的ON 状态和开关2 ...

  9. HDU 4735 Little Wish~ lyrical step~(DLX , 反复覆盖)

    解题思路: DLX 的模板题.反复覆盖. #include <stdio.h> #include <string.h> #include <iostream> #i ...

随机推荐

  1. MS SQL Sever数据库还原

    一.右键 数据库 二.点击 [还原文件和文件组(E)...],弹出下图的窗口界面 1.在 目标数据库 的输入框填写你的数据库名(注意这是新建一个数据库供还原使用,不能还原到已有的数据库) 三.点击[源 ...

  2. PartialViewResult用法

    后台代码 ) { IList<TestModel> lstTestModel = this.GetModelList(categoryid); return PartialView(lst ...

  3. POP动画引擎中Layer与CALayer的一点区别

    POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步: https://github.com/facebook/pop 下面简单的讲 ...

  4. mysql复制表

    create table 表名 like 要复制的表名  //复制表结构 insert into 表名 select * from 要复制的表名  //复制数据 方法2,一般不推荐,如果后台加数据,可 ...

  5. jQuery get/post区别及contentType取值

    1.GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化浏览器是直接拿出了第一次访问的结果,表 ...

  6. dede仿站笔记

    仿站步骤查看是否为dedecms的方法,看引用路径src="/templets/default2012/images/toutiao.png" 0查看仿站编码,选择utf8或gbk ...

  7. the introduction of scrapy1.1 tools

    scrapy xxcommand:输出xxcommand的相关信息 help:scrapy的基本命令,用于查看帮助信息 version:查看版本信息,可见-V参数查看各组件的版本信息: startpr ...

  8. FileReader

    Reader 字符流的基类,抽象类 FileReader 读取文件的字符流 package file; import java.io.File; import java.io.FileReader; ...

  9. vue访问原生 DOM 事件

    <body> <div id="test"> <button @click="changeColor('你好',$event)"& ...

  10. 设置 cell点击 背景色

    //设置 cell点击 背景色 cell.selectionStyle = UITableViewCellSelectionStyleDefault; cell.selectedBackgroundV ...