POJ 3600 dfs
来源:互联网 发布:php支付宝sdk集成 编辑:程序博客网 时间:2024/05/29 13:43
点击打开链接
题意:给一个小矩阵和一个大矩阵,问你将大矩阵的一些行和一些列去掉后能后变成小矩阵
思路:因为列数只有20,所以dfs爆搜即可,然后行就可以直接判断一下删除一些列后是否还可以满足
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const ll INF=0x3f3f3f3f3f3f3f3fll;const int maxn=30;char str[maxn][maxn];int A[maxn][maxn],B[maxn][maxn],flag,sum[maxn],cnt[maxn];int r,c,R,C;bool vis[maxn];int judge(){ int ff=0; for(int i=0;i<R;i++){ int fff=0; for(int j=0;j<C;j++){ if(vis[j]==1) continue; if(B[i][j]==A[ff][fff]) fff++; } if(fff>=c) ff++; } if(ff<r) return 0; return 1;}void dfs(int deep){ int tmp=judge(); if(tmp==0) return ; if(deep==0) flag=tmp; if(deep==0||flag) return ; for(int i=0;i<C;i++){ if(flag) return ; if(vis[i]==0){ vis[i]=1; dfs(deep-1); vis[i]=0; } }}int main(){ while(scanf("%d%d",&r,&c)!=-1){ memset(sum,0,sizeof(sum)); for(int i=0;i<r;i++) scanf("%s",str[i]); for(int i=0;i<r;i++) for(int j=0;j<c;j++) {A[i][j]=str[i][j]-'0';if(A[i][j]==1) sum[i]++;} scanf("%d%d",&R,&C); for(int i=0;i<R;i++) scanf("%s",str[i]); for(int i=0;i<R;i++) for(int j=0;j<C;j++) B[i][j]=str[i][j]-'0'; flag=0; memset(vis,0,sizeof(vis)); dfs(C-c); if(flag) printf("Yes\n"); else printf("No\n"); } return 0;}
0 0
- POJ 3600 dfs
- POJ 3600 Subimage Recognition dfs
- DFS POJ
- POJ DFS
- POJ 3600 Subimage Recognition(dfs)
- poj 3083 DFS+DFS+BFS
- POJ 1753 ID+DFS
- poj 1950 数字dfs
- poj 1816(trie+dfs)
- POJ 3107 Godfather(DFS)
- poj 3620(DFS)
- poj 1020 DFS
- poj 2362Square(DFS)
- POJ 2676 Sudoku dfs
- POJ 2357 Labyrinth [DFS]
- poj 1011 dfs
- poj 1190 dfs(生日蛋糕)
- poj 1154 dfs
- 【POJ 3735】Training little cats(万万没想到の矩快)
- PHP之二_HTML标签简介(二)
- NoHttp
- C++ Primer(第五版)练习3.6
- 实验吧之CTF---Snake
- POJ 3600 dfs
- CSS浮动
- YII框架数据库的增删改查
- Nodejs的事件驱动模式
- UVA 156 Ananagrams(map,string的理解)
- [坑][poj2396]有上下界的最大流
- ngResource模块
- 数据结构的基本概念?
- Android自定义组件之循环广告