翻纸牌游戏

Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 2   Accepted Submission(s) : 2
Problem Description
有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌。但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者有反翻到正)时,他左右两张纸牌(最左边和最右边的纸牌,只会影响附近一张)也必须跟着翻动,现在给你一个乱的状态,问你能否把他们整理好,使得每张纸牌都正面朝上,如果可以,最少需要多少次操作。
 
Input
有多个case,每个case输入一行01符号串(长度不超过20),1表示反面朝上,0表示正面朝上。
 
Output
对于每组case,如果可以翻,输出最少需要翻动的次数,否则输出NO。
 
Sample Input
01 011
 
Sample Output
NO 1
题解:find函数应该放到最前,错了半天。。。
 代码1;
 #include<stdio.h>
#include<string.h>
#define MIN(x,y)(x<y?x:y)
int len,flot,ans;
int s[];
void turn(int x){
s[x]=!s[x];
if(x->=)s[x-]=!s[x-];
if(x+<len)s[x+]=!s[x+];
}
bool find(){
for(int i=;i<len;i++){
// printf("%d ",s[i]);
//if(s[i])puts("");
if(s[i])return false;
}
return true;
}
void dfs(int x,int time){
if(find()){
flot=;
ans=MIN(ans,time);
return;
}
if(x>=len)return;
dfs(x+,time);
turn(x);
dfs(x+,time+);
turn(x);
}
int main(){
char m[];
while(~scanf("%s",m)){
len=strlen(m);
for(int i=;i<len;i++)s[i]=m[i]-'';
s[len]='\0';
ans=0x3f3f3f3f;
flot=;
dfs(,);
//printf("%d\n",ans);
if(flot)printf("%d\n",ans);
else puts("NO");
}
return ;
}

代码2;

 #include<stdio.h>
#include<string.h>
#define MIN(x,y)(x<y?x:y)
int len,flot,ans;
int s[],cnt[];
void turn(int x){
s[x]=!s[x];
if(x->=)s[x-]=!s[x-];
if(x+<len)s[x+]=!s[x+];
}
bool find(){
for(int i=;i<len;i++){
// printf("%d ",s[i]);
//if(s[i])puts("");
if(s[i])return false;
}
return true;
}
void dfs(int x){
if(find()){
flot=;
int temp=;
for(int i=;i<len;i++)if(cnt[i]==)temp++;
ans=MIN(ans,temp);
return;
}
if(x>=len)return;
for(cnt[x]=;cnt[x]<;){
turn(x);
cnt[x]++;
dfs(x+);
}
}
int main(){
char m[];
while(~scanf("%s",m)){
len=strlen(m);
for(int i=;i<len;i++)s[i]=m[i]-'';
s[len]='\0';
ans=0x3f3f3f3f;
flot=;
memset(cnt,,sizeof(cnt));
dfs();
//printf("%d\n",ans);
if(flot)printf("%d\n",ans);
else puts("NO");
}
return ;
}

翻纸牌游戏(dfs回溯)的更多相关文章

  1. HDU 2209 翻纸牌游戏(DFS)

    题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...

  2. hdu2209翻纸牌游戏

    翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. HDU 2209 翻纸牌游戏 状态BFS

    翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem De ...

  4. HDU 2209 翻纸牌游戏

    翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  5. hdu 2209 翻纸牌游戏【贪心】

    本来是冲着搜索去的--其实可以贪心 因为能改变第一位的只有第一位和第二位,然后改完之后后面的同理,也就是说只要贪心的推一遍就可以 但是注意要在翻第一个和不翻第一个之间取个min #include< ...

  6. 【HDOJ】2209 翻纸牌游戏

    状态压缩+双向广搜.注意控制时间t. /* 2209 */ #include <iostream> #include <string> #include <map> ...

  7. 翻纸牌 高校俱乐部 英雄会 csdn

    题目描述 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者 ...

  8. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  9. [Usaco2007 Open]Fliptile 翻格子游戏题解

    问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec  内存限制: 128 MB 题目描述 Farmer John knows that an intell ...

随机推荐

  1. Why Study JavaScript?

    JavaScript is one of the 3 languages all web developers must learn: 1. HTML to define the content of ...

  2. 【翻译】MVC Music Store 教程-概述(三)

    Controller 与传统的Web框架,将传入的URL通常映射到磁盘上的文件.例如:一个URL请求“/Products.aspx" 或"/Products.php”是处理一个Pr ...

  3. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  4. SiKuli 图形脚本语言【转载】

    Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 当你看到上图sikuli的脚本时,一定会惊呼,这样都可以~!脚本加截图~~ ...

  5. [LeetCode][Python]15:3Sum

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 15: 3Sumhttps://oj.leetcode.com/problem ...

  6. Eclipse 配置Tomcat启动参数 Java EE IDE for Web Developers. Version: Helios Service Release 2

    因为在开发的过程中出现了PerGen Space.所以需要修改Tomcat的启动参数,郁闷的事情是公司不使用盗版,因此离开了熟悉的一塌糊涂的MyEclipse界面还真的找不到配置Tomat启动参数的地 ...

  7. Mac 上开启一个简单的服务器

    终端输入命令: python -m SimpleHTTPServer 会开启一个端口为8000的本地服务器.

  8. 在mac上访问自带服务器权限问题

    在开发中,有时候我们需要自己的在电脑上做一些网络相关的测试功能,因此,我们必须在本地上模拟网络环境. 在模拟网络环境中,经常会遇到访问权限的问题.现在我就把自己的解决办法写出来.我用的模拟服务器站点是 ...

  9. Android tp的虚拟按键(virtual key)处理

    Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的.对Linux熟悉的人可能会说,it's ea ...

  10. pl/sql developer 编码格式设置(转)

    一.pl/sql developer 中文字段显示乱码 原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的. 二.查看和修改oracle数据库字符集: select ...