poj_3185 反转问题
题目大意
有20个碗排成一排,有些碗口朝上,有些碗口朝下。每次可以反转其中的一个碗,但是在反转该碗时,该碗左右两边的碗也跟着被反转(如果该碗为边界上的碗,则只有一侧的碗被反转)。求最少需要反转几次,可以使得所有碗口均朝上。
题目分析
类似黑白染色问题(将一个格子染色,其上下左右四个格子也被染成分别相反的颜色),找到规律之后可以不用进行暴力枚举搜索。
考虑最左边的那个碗,该碗要么被反转要么不被反转,只有两种可能。对于任何一种可能继续考虑:对于碗1,如果碗0口朝下,则只有碗1能够将其反转(因为碗0已经考虑过了),因此碗1必须反转。同样继续考虑碗2(看碗1是否口朝下)....直到最后一个碗。
因此,碗0反转和不反转分别只对应一种20个碗的反转情况。这种看似情况很多的问题,在合理性的剪枝之下,其实合法的状态很少,且合法的状态是可以由开始的状态推出来的。
实现(c++)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
int bowl[25];
int bowl2[25];
int main(){
while (scanf("%d", &bowl[0]) != EOF){ bowl2[0] = bowl[0];
for (int i = 1; i < 20; i++){
scanf("%d", &bowl[i]);
bowl2[i] = bowl[i];
}
int flip_count = 0;
//not flip position 0
for (int i = 1; i < 20; i++){
if (bowl[i - 1]){
flip_count++;
bowl[i - 1] = 0;
bowl[i] = 1 - bowl[i];
bowl[i + 1] = 1 - bowl[i + 1];
}
}
int min_flip = flip_count;
if (bowl[19] == 1){
min_flip = 10000;
}
//flip bowl 0
flip_count = 1;
bowl2[0] = 1 - bowl2[0];
bowl2[1] = 1 - bowl2[1];
for (int i = 1; i < 20; i++){
if (bowl2[i - 1]){
flip_count++;
bowl2[i - 1] = 0;
bowl2[i] = 1 - bowl2[i];
bowl2[i + 1] = 1 - bowl2[i + 1];
}
} if (bowl2[19] == 0){
min_flip = min_flip < flip_count ? min_flip : flip_count;
}
printf("%d\n", min_flip);
}
return 0;
}
poj_3185 反转问题的更多相关文章
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用
再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...
- 控制反转、依赖注入、Unity容器
控制反转原则 依赖注入 Install-Package Unity:https://www.nuget.org/packages/Unity/ Github:https://github.com/un ...
- PowerDesigner从Sqlserver中反转为带注释的字典及快捷键操作
PowerDesigner的操作经常忘记,所以把常用的功能记录下来备忘. 1.修改反转过来的字段 PowerDesigner从数据库反转的时候,默认不带注释,需要先进行修改. 输入如下脚本: {OWN ...
- 控制反转(IOC)
对于很多大中型项目为了实现解耦都用到了控制反转. 常用的控制反转有unity,autoface,spring.Net 使用它们的目的归根结底就一个:避免了直接new一个对象. 今天抽时间将三种控制反转 ...
- 链表反转leetcode206
最近准备结束自己的科研生涯,准备要开始找工作了,准备在LEETCODE刷刷题...刷的前40题全部用python刷的,各种调包速度奇快,后被师哥告知这样没意义,于是准备开始回归C++,Python用的 ...
- 回顾Spirng ioc 控制反转
Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的.结合网上对Spring Ioc的理解,回顾一下自 ...
- python的反转(切片)
看下面代码吧,简单来说不如直接看代码.如下: #coding=utf-8 __author__ = 'debude' a = 'python' print a[::-1] #从最后n开始,每走一位都打 ...
随机推荐
- c# 终止线程
最近在弄一个等待窗口,使用了线程去调用form.在结束线程这边碰到了些问题.调用: thread.Abort();thread.Join();老被ThreadAbortException异常抛出困扰. ...
- 常用的百度API地图操作
常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167
- 浏览器向下兼容之polyfill[阅后即瞎]
我们入门JavaScript的时候都写过polyfill: 比如手写一个弹窗, 手动模拟实现一个表格, 这些魔力的对象都是浏览器原生支持的, 虽然当我成为JS专家之后再也没造过轮子, 但是最近才发现我 ...
- day day up
复位与时钟控制器 RCC(Reset Clock Controller) 通用输入输出 GPIO(General Purpose Input/Output) 嵌套向量中断控制器 NVIC(Nested ...
- thinkphp 前台测试
配置文件 <?php return array( 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 ...
- selenium测试(Java)(三)
控制浏览器: http://www.cnblogs.com/moonpool/p/5657752.html
- imx6 读取CPU温度
imx6 读取CPU温度 cat /sys/class/thermal/thermal_zone0/temp Tony Liu 2017-2-11, Shenzhen
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- (转)SDL 1.2 to 2.0 Migration Guide--SDL1.2更新到SDL2.0指南
SDL 1.2 to 2.0 Migration Guide 目录 SDL 1.2 to 2.0 Migration Guide Translations Introduction Overview ...
- css -- css选择器
选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstna ...