问题标题: 酷町堂:1064 终极挑战

0
0
已解决
汪恺恒
汪恺恒
中级启示者
中级启示者

题目描述 Description

为了增加晚会的趣味性,老师给大家出了一道附加题,以满足那些充满挑战激情的同学来拿到更多的奖品。题目是这样的:
给一个M行N列的01矩阵,让你选出一些行(不一定选出全部行)使得每一列都有且只有一个1。

输入描述 Input Description

输入含有多组数据。最多会有500组。
输入之间会有梯度,也就是不是每组输入都是500组。
对每组数据
第一行:两个由空格隔开的整数: M和N。
然后是M行每行N个等于0或者等于1的整数,整数之间由空格隔开。
0<=M<=16,0<=N<=300。

输出描述 Output Description

对每组数据输出一行,如果可以达到题中要求,输出’Yes’否则输出’No’。均不包括引号。

WA10

#include<iostream> 
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std; 
int n,m,a[20][500],b[500],x;
void dfs(int m,int n){
    x=0;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            int f=0,ff=0;
            for(int k=1;k<=n;k++){
                if(f&&a[j][k]){
                    ff=1;
                    break;
                }
                if(a[j][k]){
                    f=1;
                }
            }
            if(ff==1) break;
            else if(j==m){
                x=1;
                return ;
            }
        }                       
    }
}
int main(){
    while(cin>>m>>n){
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                cin>>a[i][j];
            }
        }
        dfs(m,n);
        if(x) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;   
}

 


0
已采纳
梁逸凡
梁逸凡
资深守护
资深守护

建议你用深搜

不然可能会误判

0
0
我要回答