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. 持续集成之Jenkins+Gitlab简介 [一]

    转载:http://blog.csdn.net/abcdocker/article/details/53840449 持续集成概念 持续集成Continuous Integration 持续交付Con ...

  2. Node.js 解析gzip网页(https)

    gzip网页指网页头字段Content-Encoding是gzip(GNU zip)内容编码方式.内容编码是指不丢失实体信息的前提下所进行的压缩. Node.js 代码如下: //========== ...

  3. 深入浅出CChart 每日一课——快乐高四第六课 二丫的青梅,返璞归真之普通窗体多区域画图

    有好些朋友给我反映,就是一个窗体中加入好几个CChartWnd之后.工作不正常.这个的确是这样,CChartWnd会接管原来窗体的消息循环,加入多个CChartWnd之后,就相当于出租房转手好几道,消 ...

  4. 挖一挖C#中那些我们不经常使用的东西之系列(1)——ToDictionary,ToLookup

    这个系列我们看看C#中有哪些我们知道.可是又不知道怎么用.又或者懒得去了解的东西,比方这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,当中ToAr ...

  5. iOS开发-XCode常用快捷键整理

    前言:如果我们能够掌握并巧妙地使用快捷键,可以大大加快我们的工作效率,这个对经常使用快捷键的人们来说,应该很容易理解.因此我们需要做的是,针对于自己经常使用的快捷键去进行记忆.我不会推荐你们去把所有的 ...

  6. TCP/IP ---分层

    TCP/IP的分层 ICMP是IP协议的附属协议.IP层用它来与其他主机或路由器交换错误报文和其他重要信息.尽管ICMP主要被IP使用,但应用程序也有可能访问它.我们将分析两个流行的诊断工具,Ping ...

  7. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡(转)

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  8. JPA ID生成策略(转---)

    尊重原创:http://tendyming.iteye.com/blog/2024985 JPA ID生成策略 @Table Table用来定义entity主表的name,catalog,schema ...

  9. 【算法拾遗(java描写叙述)】--- 插入排序(直接插入排序、希尔排序)

    插入排序基本思想 每次将一个待排序的记录按其keyword大小插入到前面已经拍好序的子文件的适当位置,直到全部记录插入完毕为止. 直接插入排序 基本思想 直接插入排序的基本操作是将一个记录插入到已排好 ...

  10. WCF信道工厂Channel Factory

    ChannelFactory<TChannel> 类 一个创建不同类型通道的工厂,客户端使用这些通道将消息发送到不同配置的服务终结点. 命名空间: System.ServiceModel ...