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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android之R cannot be resolved to a variable

    刚才又遇到了R cannot be resolved to a variable的问题,就翻了翻网上的资料,调理的整理了一下1. 检查Android 的SDK是否丢失需要重新下载,检查build path,把需要导入的JAR包确认都导入成功2. 确保class没有import Android.R,注意是不能有Android.R,可以有其他R文件,比如你自己的包;3. 错误cla

    2022年3月9日
    58
  • vscode快捷键与使用配置[通俗易懂]

    vscode快捷键与使用配置[通俗易懂]简化记忆F1F11Ctrl+P?!:@#Ctrl+NCtrl+Shift+NCtrl+Shift+WCtrl+TabCtrl+\Ctrl+[、Ctrl+]Shift+Alt+F,或Ctrl+Shift+P后输入formatcodeAlt+Up或Alt+Down选中按TAB右移,按SHIFT+TAB左移Ctrl+F主命令框F1或Ctrl+Shift+P:打开命令面板。在打开的输入框内,可以输入任何命令,例如:按一下Backspace会

    2022年5月20日
    51
  • 贴片DO-218AB封装TVS二极管SM8T33A

    贴片DO-218AB封装TVS二极管SM8T33A提及“汽车级瞬态二极管”,大多数电子工程师都会想到DO-218AB封装SM8S系列中的SM8S24V、SM8S33A、SM8S36A、SM8S36CA等等,这些物料常用于汽车12V系统和24系统中,可通过抛负载7637-5a/5b测试,为汽车电子产品安全保驾护航。关于汽车级瞬态TVS二极管SM8T系列,知道的电子工程师并不多,但是经常有客户咨询:SM8T系列型号有哪些?SM8T33A二极管参数?SM8T36A可以替代SM8S36A吗?SM8T24CA和SM8S24CA有什么区别……瞬态二极管厂家东沃电子

    2022年9月23日
    0
  • 瑞利熵与香农熵_熵 信息

    瑞利熵与香农熵_熵 信息在信息论中,Rényi熵是Hartley熵,Shannon熵,碰撞熵和最小熵的推广。熵能量化了系统的多样性,不确定性或随机性。Rényi熵以AlfrédRény

    2022年8月3日
    6
  • 多种前端框架的优缺点「建议收藏」

    多种前端框架的优缺点「建议收藏」多种前端框架的优缺点

    2022年4月22日
    82
  • excel宏编程 c语言,宏(巨集)

    excel宏编程 c语言,宏(巨集)宏(Macro,巨集),是一种批处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,“宏”这个词的使用暗示着将小命令或动作…

    2022年6月8日
    46

发表回复

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

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