3280 easyfinding

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 查看运行结果
 
 
题目描述 Description

给一个M 行N  列的01 矩阵,让你选出一些行 (不一定选出全部行)使得每一列都有 
且只有一个1。其中M<= 16,N<=300 。

输入描述 Input Description

输入含有多组数据。以文件结束符(eof )为结束。最多会有500 组。 
    输入之间会有梯度,也就是不是每组输入都是500 组。 
    对每组数据,第一行:两个由空格隔开的整数M 和N 。然后是M 行每行N  个等于0 
或者等于1 的整数,整数之间由空格隔开。

输出描述 Output Description

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

样例输入 Sample Input

3 3 
0 1 0 
0 0 1 
1 0 0 
4 4 
0 0 0 1 
1 0 0 0 
1 1 0 1 
0 1 0 0

样例输出 Sample Output

Yes 
No

数据范围及提示 Data Size & Hint

注意时间复杂度

分类标签 Tags 点此展开

 
第一次没读明白题目,任选几行组成(不一定连续)
用枚举做就AC了一个点
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int map[][];
int n,m;
void dfs(){
int flag=;
for(int i=;i<=m;i++)
for(int j=i;j<=m;j++){
for(int k=;k<=n;k++){
int num=map[j][k]-map[i-][k];
if(num!=) break;
if(k==m){flag=;printf("Yes\n");return ;}
}
}
if(!flag) printf("No\n");
}
int main(){
while(scanf("%d%d",&m,&n)==){
memset(map,,sizeof map);
for(int i=,x;i<=m;i++){
for(int j=;j<=n;j++){
scanf("%d",&x),map[i][j]=map[i-][j]+x;
}
}
dfs();
}
return ;
}

正解AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 310
struct node{
int vis[N];
}a[N];
int n,m,head,tail,flag;
int v[][N];
int ok(int x){//验证
for(int i=;i<=m;i++)
if(!a[x].vis[i])return ;
return ;
}
void bfs(){
while(head<=tail){//不明确第一个状态,so"<="
if(head>*n) return ;//防止死循环
for(int i=;i<=n;i++){
++tail;
for(int j=;j<=m;j++)//回溯
a[tail].vis[j]=a[head].vis[j];
int ff=;
for(int j=;j<=v[i][];j++)
if(a[tail].vis[v[i][j]]){//有1 - 不满足
ff=;break;
}
if(!ff){
for(int j=;j<=v[i][];j++)
a[tail].vis[v[i][j]]=;//更新vis
if(ok(tail)){
flag=;
printf("Yes\n");
return ;
}
}
else
tail--;//当前不满足,回溯
}
head++;
}
}
int main(){
while(scanf("%d%d",&n,&m)==){
memset(a,,sizeof a);
memset(v,,sizeof v);
for(int i=,x;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&x);
if(x) v[i][++v[i][]]=j;//模拟动态数组,v[i][++v[i][0]]=j;记录第i行第v[i][0]个1的列号j
}
}
head=;tail=;flag=;
bfs();
if(!flag) printf("No\n");
}
return ;
}

3280 easyfinding的更多相关文章

  1. easyfinding(codevs 3280)

    3280 easyfinding  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 给一个M 行N  列 ...

  2. poj 3280 Cheapest Palindrome

    链接:http://poj.org/problem?id=3280 思路:题目给出n种m个字符,每个字符都有对应的添加和删除的代价,求出构成最小回文串的代价 dp[i][j]代表区间i到区间j成为回文 ...

  3. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  4. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  5. POJ 3280 Cheapest Palindrome(DP 回文变形)

    题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...

  6. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

  7. (中等) POJ 3280 Cheapest Palindrome,DP。

    Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system ...

  8. POJ 3280 - Cheapest Palindrome - [区间DP]

    题目链接:http://poj.org/problem?id=3280 Time Limit: 2000MS Memory Limit: 65536K Description Keeping trac ...

  9. POJ 3280 Cheapest Palindrome(区间DP求改成回文串的最小花费)

    题目链接:http://poj.org/problem?id=3280 题目大意:给你一个字符串,你可以删除或者增加任意字符,对应有相应的花费,让你通过这些操作使得字符串变为回文串,求最小花费.解题思 ...

随机推荐

  1. rails generate model/resource/scaffold的区别

    If you’re just learning Ruby on Rails, you may be confused as to when to generate individual models, ...

  2. Django——META内部类选项

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  3. ScrollView反弹效果

    public class BounceScrollView extends ScrollView { private View inner;// 孩子View private float y;// 点 ...

  4. 简单模拟Spring的注入

    主要就是读XML技术和反射技术. 在xml中读出相关配置信息,然后利用反射将其实例化为对象,并调用其构造方法,在实例化的过程中将属性注入实例. 实例化和属性注入这些操作都交给了框架,不再需要自己的去n ...

  5. <转>大白菜的后门

    转自360论坛

  6. radiusd cisco限速问题

    http://puck.nether.net/pipermail/cisco-bba/2011-February/001349.html

  7. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(一)—— 手把手教你创建第一个三层架构+mvc的asp.net项目

    下面开启项目 1. 打开vs2010-文件-新建项目 2. 先创建一个空的解决方案: 选择其他项目类型-visual studio 解决方案-空白解决方案(默认.NET Framework 4),项目 ...

  8. internet与Internet的区别

    internet是用一个共同的协议族把多个网络连接在一起.而Internet指的是世界范围内通过TCP/IP互相通信的所有主机集合(超过1 0 0万台).Internet是一个internet,但in ...

  9. springboot学习(四) 日志管理

    1.简介 Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现.默认为会Java Util Logging, Log4J, Log4J2和Logback提供配 ...

  10. svn Couldn't open rep-cache database

    出现这样的错误原因是因为 问题一 开始出现错误:The database disk image is malformed 解决方案:http://www.cnblogs.com/chen110xi/p ...