首页 > 其他分享 >精确覆盖和重复覆盖

精确覆盖和重复覆盖

时间:2023-01-18 22:01:17浏览次数:49  
标签:11 输出 覆盖 重复 矩阵 复制 精确 include

精确覆盖

给定一个 �N 行 �M 列的矩阵,矩阵中每个元素要么是 11,要么是 00。

你需要在矩阵中挑选出若干行,使得对于矩阵的每一列 �j,在你挑选的这些行中,有且仅有一行的第 �j 个元素为 11。

输入格式

第一行两个数 �,�N,M。

接下来 �N 行,每行 �M 个数字 00 或 11,表示这个矩阵。

输出格式

一行输出若干个数表示答案,两个数之间用空格隔开,输出任一可行方案均可,顺序随意。

若无解,输出 No Solution!

输入输出样例

输入 #1
3 3
0 0 1
1 0 0
0 1 0
输出 #1
2 1 3
输入 #2
3 3
1 0 1
1 1 0
0 1 1
输出 #2
No Solut

P4929 【模板】舞蹈链(DLX) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
舞蹈链
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mx=250501;//n*m+m<=250500
inline int Read(){
    int x=0;
    char c=getchar();
    while(c>'9'||c<'0')c=getchar();
    while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    return x;
}
int n,m;
int cnt;
int l[mx],r[mx],u[mx],d[mx],col[mx],row[mx];//每个点的左右上下指针,所在行列 
int h[mx];//每行的头结点 
int s[mx];//每列的节点数 
int ansk[mx];//选了那些集合 
void init(int m){//m个元素 
    for(register int i=0;i<=m;i++){
        r[i]=i+1;
        l[i]=i-1;
        u[i]=d[i]=i;
    }
    r[m]=0;
    l[0]=m;
    memset(h,-1,sizeof(h));
    memset(s,0,sizeof(s));
    cnt=m+1;
}//初始化 
inline void link(int R,int C){//R行C列插入点 
    s[C]++;
    row[cnt]=R;
    col[cnt]=C;
    u[cnt]=C;
    d[cnt]=d[C];
    u[d[C]]=cnt;
    d[C]=cnt;
    if(h[R]==-1)h[R]=r[cnt]=l[cnt]=cnt;//该行没有点,直接加入 
    else{
        r[cnt]=h[R];
        l[cnt]=l[h[R]];
        r[l[h[R]]]=cnt;
        l[h[R]]=cnt;
    }
    cnt++;
    return;
}
inline void remove(int C){//删除涉及C列的集合 
    r[l[C]]=r[C],l[r[C]]=l[C];
    for(int i=d[C];i!=C;i=d[i]){
        for(int j=r[i];j!=i;j=r[j]){
            u[d[j]]=u[j];
            d[u[j]]=d[j];
            s[col[j]]--;
        }
    }
}
inline void resume(int C){//恢复涉及C列的集合 
    for(int i=u[C];i!=C;i=u[i]){
        for(int j=l[i];j!=i;j=l[j]){
            u[d[j]]=j;
            d[u[j]]=j;
            s[col[j]]++;
        }
    }
    r[l[C]]=C;
    l[r[C]]=C;
}
bool dance(int deep){
    if(r[0]==0){
        register int i=0;
        for(i=0;i<deep;i++)printf("%d ",ansk[i]);
        return 1;
    }
    int c=r[0];
    int i,j;
    for(i=r[0];i!=0;i=r[i])if(s[i]<s[c])c=i;
    remove(c);
    for(i=d[c];i!=c;i=d[i]){
        ansk[deep]=row[i];
        for(j=r[i];j!=i;j=r[j])remove(col[j]);
        if(dance(deep+1))return 1;
        for(j=l[i];j!=i;j=l[j])resume(col[j]);
    }
    resume(c);
    return 0;
}
int main(){
//    freopen("cin.txt","r",stdin);
    n=Read(),m=Read();
    register int i,j;
    int f;
    init(m);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            f=Read();
            if(f)link(i,j);
        }
    }
    if(!dance(0))printf("No Solution!");
    return 0;
}

重复覆盖

 

标签:11,输出,覆盖,重复,矩阵,复制,精确,include
From: https://www.cnblogs.com/weinan030416/p/17060687.html

相关文章

  • 没有重复数字的全排列-js
    题目描述全排列,传入数字输出所有可能出现的情况思路分析经典回溯法例题采用闭包的方式记录总的结果(可以访问外部变量),记录每一层的结果,记录当前的深度,用记事本记录元......
  • mysql使用limit分页,随着页码的增大,查询效率越低下;数据混乱且有重复
    1,对limit分页问题的性能优化方法利用表的覆盖索引来加速分页查询我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。因为利用索......
  • 13. Pytest常用插件:pytest-repeat重复运行用例
    一、前言上面我们介绍了当用例失败时的重复运行,其实我们在实际工作中还会遇到一种情况,我们就是单纯的想让某条用例重复运行指定的次数。平常在做功能测试的时候,经常会遇......
  • 【补档】15 Jan 084. 含有重复元素集合的全排列
    15Jan084.含有重复元素集合的全排列给定一个可包含重复数字的整数集合nums,按任意顺序返回它所有不重复的全排列。输入:nums=[1,1,2]输出:[[1,1,2],[1,2,1],[......
  • 超巧妙的重复子串解决方法
    虽然是一道简单题,但是有一种超巧妙的解决方法classSolution{public:boolrepeatedSubstringPattern(strings){stringt=s+s;t.erase(t.......
  • 187. 重复的DNA序列
    问题描述https://leetcode.cn/problems/repeated-dna-sequences/description/解题思路这同样是一个滑动窗口的典型问题。首先我们看一下数据规模,进行一下异常处理。我......
  • 219. 存在重复元素II
    问题链接https://leetcode.cn/problems/contains-duplicate-ii/description/解题思路这道题目是一个经典的滑动窗口题。常规解法,注意边界值就行。注意我们应该完全模......
  • 一步一步实现若依框架--2.3防止重复提交(后台) repeat_submit
    原理:常见的场景端页面多次点击提交按钮,通常见到的是前端通过点击一次后使按钮disable进行处理,后端同样也需要进行限制。若依使用了注解+拦截器的方式,这里其实也可以用......
  • 剑指Offer 082. 含有重复元素集合的组合
    给定一个可能有重复数字的整数数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使......
  • SQL---mysql删除重复数据
    开发时,经常会有清理数据库中重复数据的需求,比如下面这张表report_apply :我们需要删除report_name重复的数据,具体步骤如下:--重复数据SELECTreport_namefromreport_apply......