翻纸牌游戏(dfs回溯)
翻纸牌游戏
Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 2 Accepted Submission(s) : 2
#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回溯)的更多相关文章
- HDU 2209 翻纸牌游戏(DFS)
题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...
- hdu2209翻纸牌游戏
翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 2209 翻纸牌游戏 状态BFS
翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem De ...
- HDU 2209 翻纸牌游戏
翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
- hdu 2209 翻纸牌游戏【贪心】
本来是冲着搜索去的--其实可以贪心 因为能改变第一位的只有第一位和第二位,然后改完之后后面的同理,也就是说只要贪心的推一遍就可以 但是注意要在翻第一个和不翻第一个之间取个min #include< ...
- 【HDOJ】2209 翻纸牌游戏
状态压缩+双向广搜.注意控制时间t. /* 2209 */ #include <iostream> #include <string> #include <map> ...
- 翻纸牌 高校俱乐部 英雄会 csdn
题目描述 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者 ...
- P1074 靶形数独 dfs回溯法
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...
- [Usaco2007 Open]Fliptile 翻格子游戏题解
问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ...
随机推荐
- 第6章 堆排序,d叉堆,优先队列
#include<stdio.h> #include<stdlib.h> #include<string.h> #define leftChild(i) (2*(i ...
- [问题解决] locale::facet::_S_create_c_locale name not valid
错误: exception in initAndListen: 14043 clear tmp files caught exception exception: locale::facet::_S_ ...
- Cortex-M3学习日志(一)-- GPIO实验
因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...
- android 读写sd卡的权限设置
原文:android 读写sd卡的权限设置 在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题. ...
- [LeetCode][Python]Integer to Roman
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/integer ...
- Android建立模拟器进行调试
安装好android开发环境后.用到下面几个命令.android, adb, emulator android - 最主要的android命令.能够进行sdk更新,列出设备源,生成虚拟设备等. adb ...
- codefirst初尝试
Code First 约定 借助 CodeFirst,可通过使用 C# 或Visual Basic .NET 类来描述模型.模型的基本形状可通过约定来检测.约定是规则集,用于在使用 Code Firs ...
- ASP.NET MVC View向Controller传值方式总结
1:QueryString传值1)也可以使用new{}来为form的action增加querystring2)在controler里使用Request.QueryString["word&q ...
- sql语句中特殊函数的用法
1.concat CONCAT(字串1, 字串2, 字串3, ...): 将字串1.字串2.字串3,等字串连在一起. 例如: Geography 表格 region_name store_na ...
- shell查看并修复网络连接
1. shell监控网卡状态,故障时自动重启网卡 http://blog.slogra.com/post-425.html cat fix_eth0.sh #!/bin/bash check_and ...