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;
}