hdu2209翻纸牌游戏
翻纸牌游戏
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1740 Accepted Submission(s): 592
011
1
分析:从最终结果出发不管最终纸牌翻转成什么样,第一张纸牌只有两种情况:1.翻转过,2:未翻转过
而影响第一张纸牌的只有本身和第二张纸牌,
所以分两种情况:1:第一张纸牌本身翻转,然后搜索第2,3,4,....n张并由第i-1张纸牌是否正面朝上而决定第i张是否翻转(第i-1张纸牌前的纸牌已全部正面朝上),最后只需要判断第n张纸牌是否正面朝上即可
2:第一张纸牌本身不翻转,然后过程和第1种情况一样
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<iomanip>
#define INF 99999999
using namespace std; const int MAX=20+10;
char s[MAX];
int p[MAX]; int dfs(int i,int len,int num){
if(i == len)return p[i-1]?INF:num;
if(p[i-1])p[i-1]=0,p[i]=!p[i],p[i+1]=!p[i+1],++num;
return dfs(i+1,len,num);
} int main(){
while(cin>>s){
int len=strlen(s);
for(int i=0;i<len;++i)p[i]=s[i]-'0';
int sum=INF;
p[0]=!p[0],p[1]=!p[1];
sum=min(sum,dfs(1,len,1));//翻转第一位
for(int i=0;i<len;++i)p[i]=s[i]-'0';
sum=min(sum,dfs(1,len,0));//不翻转第一位
if(sum == INF)cout<<"NO"<<endl;
else cout<<sum<<endl;
}
return 0;
}
hdu2209翻纸牌游戏的更多相关文章
- HDU 2209 翻纸牌游戏 状态BFS
翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem De ...
- 翻纸牌游戏(dfs回溯)
翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
- HDU 2209 翻纸牌游戏
翻纸牌游戏 Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
- HDU 2209 翻纸牌游戏(DFS)
题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...
- hdu 2209 翻纸牌游戏【贪心】
本来是冲着搜索去的--其实可以贪心 因为能改变第一位的只有第一位和第二位,然后改完之后后面的同理,也就是说只要贪心的推一遍就可以 但是注意要在翻第一个和不翻第一个之间取个min #include< ...
- 【HDOJ】2209 翻纸牌游戏
状态压缩+双向广搜.注意控制时间t. /* 2209 */ #include <iostream> #include <string> #include <map> ...
- 翻纸牌 高校俱乐部 英雄会 csdn
题目描述 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦的是,每当你翻一张纸牌(由正翻到反,或者 ...
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 423 Solved: 173[ ...
- [Usaco2007 Open]Fliptile 翻格子游戏
[Usaco2007 Open]Fliptile 翻格子游戏 题目 Farmer John knows that an intellectually satisfied cow is a happy ...
随机推荐
- python的数与字符串
双引号 c1="sldkjf"print c1c2="It's a dog"print c2 单引号c1='sldkjf'print c1c2='It" ...
- POJ2914
POJ2914 无向图的最小割 题意:给你一个无向图,然后去掉其中的n条边,使之形成两个连通分量,也即原无向图不连通,求n的最小值. 输入: m(无向图点集),n(无向图边集) a,b,c(a,b两点 ...
- CSS 之 margin知识点
1.margin的百分比值 普通元素的百分比maigin相对于容器元素的宽度(width) 进行计算的. 这里我们在图片外面设置一个宽高分别为800 * 600的容器.设置img{ margin: 1 ...
- bootstrap字体图标
bootstrap字体图标 http://v3.bootcss.com/components/ <!DOCTYPE HTML> <html> <head> < ...
- sourceTree添加git密钥步骤
给多个远程服务器比如https://github.com/wangjian2014/wjtest/blob/master/wj.txt添加public密钥 本地服务器添加private密钥 S ...
- effective C#之 - 使用属性代替成员变量
使用属性代替公共成员变量,一个很明显的好处是,很容易在一个地方对成员变量进行控制,例如: class Customer { private string name; public string Nam ...
- 关于oracle dbms_job 定时执行的内容。
一.设置初始化参数 job_queue_processessql> alter system set job_queue_processes=n;(n>0)job_queue_proces ...
- sql server备份相关
本文转载自http://dreamfire.blog.51cto.com/418026/152075/ 感谢作者的分享!! 数据库没有备份---应如何还原丢失的数据 环境描述: 某公司装了一台 ...
- C#之重定向输入输出
当我们写完程序,想要在另一个平台上跑我们所写的程序的时候,就需要用到重定向输入输出. 重定向有两中方式,即同步和异步. 下面来讲讲同步 代码: Process process = new Proces ...
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...