传送门:HDU2209

传送门:POJ3279

说实话真不知道这两个题算不算搜索,只说枚举也不为过。因为核心思想就是枚举,然后剩下的部分就是检查了。

先说比较简单的HDU2209,下面给的链接讲解的挺明白的   点击打开链接   注意上一张的状态决定下一张是否翻转就好了,其他还比较好理解。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[25],n[25];
int book[25];
int flag=0,ans=0,len;
void dfs(int i,int cnt)
{if(i==len){for(int j=0;j<len;j++){if(n[j])return ;}flag=1;ans=min(ans,cnt);return ;}if(n[i-1]){n[i-1]=!n[i-1];n[i]=!n[i];n[i+1]=!n[i+1];dfs(i+1,cnt+1);}elsedfs(i+1,cnt);}
int main()
{while(~scanf("%s",s)){flag=0,ans=999;len=strlen(s);for(int i=0;i<len;i++)n[i]=s[i]-'0';dfs(1,0);//不翻第一张的时候for(int i=0;i<len;i++)n[i]=s[i]-'0';n[0]=!n[0];n[1]=!n[1];dfs(1,1);//翻转第一张以后if(!flag)printf("NO\n");elseprintf("%d\n",ans);}return 0;
}

下面来说POJ3279,由一维变到二维瞬间就难了好多。。同样下附大神分析..

点击打开链接     点击打开链接    点击打开链接

一维枚举第一个的状态,二维自然就是枚举第一行的状态啦,第一行的状态确定以后,每块地翻不翻就由它上一行对应的地的状态来决定,如果是上一行对应的是1就翻转。注意这里判断翻转后某一格到底是1还是0的时候,要将它周围的四个格子的翻转次数以及它本身的翻转次数加起来,因为这五个格子的翻转都会引起它的状态的变化,如果和是奇数就代表是1。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
int map[20][20];
int flip[20][20],ans[20][20];
int go[5][2]={0,0,0,1,1,0,0,-1,-1,0};
int get(int r,int c)//判断某块地翻转以后的状态
{int t=map[r][c];//先加上初状态,即输入的状态int tr,tc;for(int i=0;i<5;i++){tr=r+go[i][0];tc=c+go[i][1];if(tr>=0&&tc>=0&&tr<n&&tc<m){t+=flip[tr][tc];}}return t%2;}
int solve()
{for(int i=1;i<n;i++)//从第二行开始{for(int j=0;j<m;j++)if(get(i-1,j))//如果是同一列上一行对应的是1就翻转flip[i][j]++;}for(int i=0;i<m;i++)//判断最后一行的状态(是否全0){if(get(n-1,i))return 0;}int sum=0;for(int i=0;i<n;i++)//统计翻转次数for(int j=0;j<m;j++)sum+=flip[i][j];return sum;
}
int main()
{while(~scanf("%d%d",&n,&m)){memset(ans,0,sizeof(ans));int min=99999999;for(int i=0;i<n;i++){for(int j=0;j<m;j++)scanf("%d",&map[i][j]);}for(int i=0;i<(1<<m);i++)//i代表第一行状态,从全0到全1.{memset(flip,0,sizeof(flip));for(int j=0;j<m;j++)flip[0][j]=i>>(m-j-1)&1;//这里的位运算要自行举例子理解了...int t=solve();if(t&&t<min)//判断是否要更新答案{min=t;memcpy(ans,flip,sizeof(flip));}}if(min==99999999)printf("IMPOSSIBLE\n");else{for(int i=0;i<n;i++){for(int j=0;j<m;j++)printf("%d ",ans[i][j]);putchar('\n');}}}
return 0;
}

HDU2209+POJ3279 枚举+dfs相关推荐

  1. 重返天梯-L3-014 周游世界 (30 分)(dfs)

    题目描述 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企 ...

  2. 蓝桥杯C++ AB组辅导课

    整理的算法模板合集: ACM模板 今天在AcWing闲逛白嫖到了yxc老师的蓝桥杯C++ AB组辅导课的题单,正好快要蓝桥杯了,我准备每天花半个小时刷5道这个题单里的水题,练一练,不然到时候我各种花里 ...

  3. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  4. 蓝桥杯C++ AB组辅导课 第一讲 递归与递推 Acwing

    例题 AcWing 92. 递归实现指数型枚举 从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案. 输入格式 输入一个整数 n. 输出格式 每行输出一种方案. 同一行内的数必须升序 ...

  5. 基本算法之递推与递归的简单应用

    递推与递归的简单应用 常见的枚举形式 实现指数型枚举 DFS (一) DFS (二) 位运算(一) 位运算(二) 实现组合型枚举 DFS + 剪枝 实现排列型枚举 DFS 费解的开关 奇怪的汉诺塔 分 ...

  6. 【多题合集】网络流24题练习(更新至魔术球问题)

    飞行员配对问题(仅求方案总数) 传送门 思路:二分图后dinic走起,各边容量为1 代码: #include<bits/stdc++.h> #define inf 0x7ff using ...

  7. NOIP2016提高组 第一天第二题 天天爱跑步running 题解

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...

  8. hdu(杭电oj)第一页题目题解

    第一页有几题没写,有机会补上(嗯,忘了就是另一回事了). 这个是无聊的时候刷了第一页..存到博客上当做纪念吧.. hdu1000 简单题 难度1 计算a+b的值 hdu1001 简单题 难度1 计算1 ...

  9. poj1753Flip Game

    /*poj1753:枚举+DFS用一个计数实现数组元素在深搜时起点的变化 较为常规*/ 题意:进行若干次变化,每次可把临近的四个变换颜色,最终能使得正面颜色都相同,输出最少的次数 #include & ...

最新文章

  1. 自定义view-波纹扩散(圆扩散)
  2. SpringBoot静态资源的映射
  3. 【Python】一道题吃够Python语法糖
  4. 新手使用vue-router传参时注意事项
  5. Qt-qwidget项目入门实例
  6. ansi编码转换_8b/1b编码是个什么东东
  7. c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题
  8. C# 类型参数的约束
  9. 如何制作标识标志标签
  10. 02-客房预订系统数据库-用户和客房预订数据操作
  11. 揭开CVE漏洞挖掘与编号申请那层神秘窗户纸
  12. 折纸效果! Cocos Creator 3.0
  13. WSTMart 1.4.2 发布,让 bug 不再飞
  14. linux无人值守安装实验,无人值守批量安装linux操作系统
  15. 威海北洋电气java面试题_面试题_76_to_81_Java 最佳实践的面试问题
  16. 搭建自己的知识体系 自我提升
  17. 控制window系统应用程序定时关闭和开启
  18. Windows下jmeter使用
  19. java使用poi-tl操作word文件
  20. matlab的实验报告,MATLAB实验报告(8个实验).doc

热门文章

  1. 化工图纸中LISP_《化工工艺流程图与CAD二次开发应用》.pdf
  2. Mysql 多表联查索引失效问题
  3. 《不可思议的年代》读书笔记
  4. react报错: Unable to preventDefault inside passive event li ……
  5. 微信支付配置的订单号跟微信支付商户里面的商户订单号不一致
  6. 天才数学家高斯的小故事——不到3岁就有过人才华
  7. 物理机服务器装系统,物理机安装黑群晖DSM6.1.7系统
  8. 培训c语言程序,编程人员培训手册C语言程序设计基础
  9. 『Others』一键关闭所有应用程序
  10. AS下解决Gradle dependencies compile jar包冲突、重复问题