HDU 2209 翻纸牌游戏
来源:互联网 发布:淘宝 情趣内衣 买家秀 编辑:程序博客网 时间:2024/05/22 22:43
传送门
分析:从最终结果出发不管最终纸牌翻转成什么样,第一张纸牌只有两种情况:1.翻转过,2:未翻转过
而影响第一张纸牌的只有本身和第二张纸牌,
所以分两种情况:1:第一张纸牌本身翻转,然后搜索第2,3,4,….n张并由第i-1张纸牌是否正面朝上而决定第i张是否翻转(第i-1张纸牌前的纸牌已全部正面朝上),最后只需要判断第n张纸牌是否正面朝上即可
2:第一张纸牌本身不翻转,然后过程和第1种情况一样
注意记录两个数组来模拟,不然模拟一次后,就不是原来的数组了。
#include<cstring>#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<queue>#include<vector>using namespace std;#define LL long long#define INF 0x3f3f3f3fconst int MAXN=25;char s[MAXN];int p[MAXN],h[MAXN];int len;int main(){ while(~scanf("%s",s)){ len=strlen(s); for(int i=0;i<len;i++){ h[i]=p[i]=s[i]-'0'; } int ans=INF; int sum=0; for(int i=1;i<len;i++){ if(p[i-1]){ sum++; p[i-1]=!p[i-1]; p[i]=!p[i]; p[i+1]=!p[i+1]; } } if(p[len-1])sum=INF; ans=min(sum,ans); sum=1; h[0]=!h[0]; h[1]=!h[1]; for(int i=1;i<len;i++){ if(h[i-1]){ sum++; h[i-1]=!h[i-1]; h[i]=!h[i]; h[i+1]=!h[i+1]; } } if(h[len-1])sum=INF; ans=min(sum,ans); if(ans==INF)printf("NO\n"); else printf("%d\n",ans); } return 0;}
0 0
- HDU 2209 翻纸牌游戏
- hdu 2209 翻纸牌游戏
- hdu 2209 翻纸牌游戏
- hdu 2209 翻纸牌游戏
- hdu-2209 翻纸牌游戏
- hdu 2209 翻纸牌游戏
- hdu 2209 翻纸牌游戏
- HDU 2209 翻纸牌游戏
- HDU 2209 翻纸牌游戏
- HDU 2209翻纸牌游戏
- hdu 2209 翻纸牌游戏
- HDU 2209 翻纸牌游戏
- 翻纸牌游戏 HDU
- 翻纸牌游戏 HDU
- hdu 2209——翻纸牌游戏
- hdu 2209 翻纸牌游戏 贪心
- hdu 2209 翻纸牌游戏(dfs)
- hdu 2209 翻纸牌游戏 搜索+贪心
- 爬虫(三)--图片爬虫
- css中可以和不可以继承的属性
- 递推算法
- POJ 1011 Sticks(DFS + 剪枝)
- SASS基础教程
- HDU 2209 翻纸牌游戏
- Java7并发编程--1、线程管理
- DP 问题总结
- 进制转换 poj1220-NUMBER BASE CONVERSION
- 8086汇编语言 使用offset命令获取标号的IP地址
- BestCoder Round #84题解报告
- 和为s的连续正整数数列 and 未排序正数数组中和为s的最长子数组长度
- 安卓自定义View进阶:Path基本操作
- Dialog的重构+接口回调