AOJ 0525 Osenbei【穷竭搜索】
AOJ 0525
题意:
有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示)。一次可将同一行或同一列的煎饼全部翻转。现在需要把尽可能多的煎饼翻成正面朝上,问最多能使多少煎饼正面朝上?
输入:多组输入,每组第一行为二整数r, c (1 ≤ r ≤ 10, 1 ≤ c ≤ 10 000),剩下r行c列表示煎饼初始状态。r=c=0输入结束
输出:对于每组输入,输出最多能使多少煎饼正面朝上
这个是二维的穷举,因为列数比较多行数比较少,所以可对行做dfs穷举所有行的情况。这里用bitset保存每一行的情况,对于行的翻转,只需要用自带的flip函数。对于每一行都确定动作时,统计每一列翻时会出现的正面朝上的值以及不翻时的值,取较大数。此时,行动作确定时,列动作可以做到的最优值。因此穷举所有行情况即可求出实际最优值。
#include<iostream> #include<algorithm> #include<string.h> #include<cstring> #include<vector> #include<set> #include<stack> #include<bitset> using namespace std;const int MAX_R=10; const int MAX_C=10000;int R,C,ans; bitset<MAX_C> a[MAX_R];void dfs(int k) {if(k==R){int result=0;for(int i=0;i<C;i++){int sum=0;for(int j=0;j<R;j++){if(a[j][i])sum++;}result+=max(sum,R-sum);}ans=max(ans,result);return;}dfs(k+1);//without flippinga[k].flip();dfs(k+1);//with flipping }int main() {while(cin>>R>>C&&R&&C){for(int i=0;i<R;i++)for(int j=0;j<C;j++){bool tmp;cin>>tmp;a[i][j]=tmp;}ans=0;dfs(0);cout<<ans<<endl;}return 0; }
转载于:https://www.cnblogs.com/demian/p/6555258.html
AOJ 0525 Osenbei【穷竭搜索】相关推荐
- 《挑战程序设计竞赛》学习笔记(二):穷竭搜索
2.1 穷竭搜索 深度优先搜索 部分和问题 /*************************************************** User name: 寻雾启示wpf Note: ...
- 《挑战程序设计竞赛》--初级篇习题POJ部分【穷竭搜索+贪心】
最近看了<挑战程序设计竞赛>初级篇,这里总结一下部分poj上的练习题,主要涉及方面为: 穷竭搜索 and 贪心算法 具体题目: 简单导航 一.穷竭搜索 二.贪心算法 一.穷竭搜索 穷竭搜索 ...
- Exhaustive Search - 穷竭搜索
方法: 1. 递归函数 2. 栈 3. 队列 4. 深度优先搜索( DFS , Depth-First Search),又常称为回溯法 5. 广度优先搜索(BFS, Breadth-First Sea ...
- 第 2 章:初出茅庐【初级篇 - 2.1 穷竭搜索】
目录 201. 部分和问题[爆搜] 202. 水洼计数 Lake Counting[连通块] 203. 迷宫的最短路径[bfs] 201. 部分和问题[爆搜] https://www.papamelo ...
- poj3050 穷竭搜索 挑战程序设计竞赛
2018-1-31 一开始题目没有读懂,没有看到样例中的唯一的2... 这题用STL里的set求解极为方便,因为set里的元素是不相同的,最后只要输出它的size即可 #include<iost ...
- poj3187 穷竭搜索 挑战程序设计大赛
2018-1-30 直接用dfs求解即可,一开始的时候提交TLE,后来优化一下就OK了! #include<iostream> #include<cstring> using ...
- AOJ 0525 Osenbei
有一个烤饼器可以烤r行c列的煎饼,煎饼可以正面朝上(用1表示)也可以背面朝上(用0表示).一次可将同一行或同一列的煎饼全部翻转.现在需要把尽可能多的煎饼翻成正面朝上,问最多能使多少煎饼正面朝上? ...
- c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
描述 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图案.方向上 ...
- 对于穷竭搜索算法优化的思考,以一群蚂蚁在竿子上爬行为例
有个这么一个最短距离或者最长距离的问题.有n只蚂蚁以每秒钟1cm的速度在Lcm的竿子上爬行.当蚂蚁爬到竿子的端点时就会掉落.由于竿子太细,两只蚂蚁相遇时,他们不能交错通过,只能各自反向爬回去.对于每只 ...
最新文章
- asp.net 2.0防止同一用户同时登陆
- OpenCASCADE绘制测试线束:拓扑命令之拓扑和几何分析
- HDFS的Java客户端操作代码(HDFS删除文件或目录)
- win10下Rabbitmq的安装和配置
- x轴z轴代表的方向图片_游戏中到底是Z轴朝上还是Y轴朝上?
- 产品铭牌要求_AMPULM:电力变压器铭牌有哪些主要技术参数,你都知道吗?
- gitlab修改管理员密码流程
- 小米重磅新机Mimoji萌拍被指抄袭 官方怒回应:将追查到底!
- mysql8 win10_window10下安装多个MySQL8.0
- python数据结构剑指offer-重建二叉树
- python分析nginx日志_利用python分析nginx日志
- 力扣 13.罗马数字转整数
- 极简代码(三)—— 向量加法
- 2-9 prev + next选择器 “远亲不如近邻” 返回且只返回唯一-个元素。 而通过prev + next选择器就可以查找与“prev”元素紧邻的下一个“next”元素...
- 结构梁配筋最牛插件_结构设计最让人困惑的问题解析汇总
- oracle 排序性能优化,Oracle优化之: 利用索引的有序性减少排序
- 锐捷交换机VRRP配置
- iOS 各种证书的作用、有效期、过期的后果和解决办法
- Vertica中的projections
- c语言printf格式限定符,c – 1字节有符号数的printf格式