FZU 1686 龙之谜 重复覆盖

FZU 1686 龙之谜 重复覆盖

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

兑换0,1模型,如。注意,数据的范围

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
using namespace std;
const int MaxM = 500;
const int MaxN = 500;
const int maxnode = MaxM*MaxN;
int K,n,m;
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 ands,ans[MaxN];
	void init(int _n,int _m)
	{
	    ands=0x3f3f3f3f;
		n = _n;
		m = _m;
		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()>=ands) return;
		if(R[0] == 0) {ands=min(ands,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);
			Dance(d+1);
			for(int j = L[i];j != i;j = L[j])resume(j);
			resume(i);
		}
	}
}g;
int mp[20][20],sa,sb,id[20][20];
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int tot=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                scanf("%d",&mp[i][j]);
                if(mp[i][j]) id[i][j]=++tot;
            }
        }
        scanf("%d%d",&sa,&sb);
        g.init(n*m,tot);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                for(int ii=i,cnt=1;cnt<=sa&&ii<n;ii++,cnt++)
                {
                    for(int jj=j,cnt2=1;cnt2<=sb&&jj<m;jj++,cnt2++)
                    {
                        if(mp[ii][jj])
                        {
                            g.Link(i*m+j+1,id[ii][jj]);
                        }
                    }
                }
            }
        }
        g.Dance(0);
        printf("%d\n",g.ands);
    }
    return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117105.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 递归算法 数据结构_数据结构中递归的定义

    递归算法 数据结构_数据结构中递归的定义一、什么是递归所谓递归,简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。引用知乎大佬的例子:我们可以把”递归

    2022年8月16日
    7
  • 安防监控项目(Remeo)概要设计

    安防监控项目(Remeo)概要设计1. 项目背景随着人们在家居生活中使用的电器越来越多,由此带来的安全隐患也有了明显的增多。为了降低电器的不合理使用带来的异常情况,大众对家庭智能监控的需求也越来越高。家庭智能监控主要依托摄像头,温湿度传感器等设备实现实时监控和智能报警的功能。RomeoMonitor主要是为模拟是家庭安防监控的简易系统。主要基于温湿度传感器、运动传感器和摄像头、蜂鸣器、LED等硬件作为终端,基于TCP和zig…

    2022年6月28日
    46
  • 前端开发常用网站_软件开发领域知识

    前端开发常用网站_软件开发领域知识87个前端必备开发网站来源:https://zhuanlan.zhihu.com/p/86777413来源:https://zhuanlan.zhihu.com/p/86777413来源:htt

    2022年8月3日
    10
  • native2ascii命令找不到_native method

    native2ascii命令找不到_native method 背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码。原因是java默认的编码方式为Unicode,而我们的计算机系统编码常常是GBK等编码。需要将系统的编码转换为java正确识别的编码问题就解决了。 1、native2ascii简介:native2asci…

    2025年10月31日
    2
  • 第九章:java 并发容器类了解与使用「建议收藏」

    第九章:java 并发容器类了解与使用「建议收藏」第九章:java 并发容器类了解与使用

    2022年4月23日
    35
  • pycharm社区版下载安装教程_pycharm社区版下载

    pycharm社区版下载安装教程_pycharm社区版下载原文链接:PyCharm社区版的下载与安装PyCharm社区版的下载与安装以PyCharm2018.3.4社区版本为例:打开:PyCharm官网,选择Download选择社区版下载双击可执行文件进行安装,如果出现用户账户控制,选择是即可进入安装界面,选择Next选择安装位置安装选项这里:createdesktopshortcut:根据系统位数勾选对应的选项updatepathvariable:可以勾选将启动器添加到pathupd

    2022年8月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号