HDU - 2209 翻纸牌游戏
当前的这张牌是否翻转取决于它的前一张牌是否朝上,如果朝上,不翻转,朝下,则翻转,这是贪心的思想,但是,对于第一张牌来说,它的前面没有牌了,所以可以翻转,也可以不翻转,分两种情况来判断,参考的别人的代码
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int INF=0x3f3f3f3f;
char s[21];
int p[21];
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(void)
{
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
for(int i=0;i<len;i++)
p[i]=s[i]-'0';
//翻转第一张牌
p[0]=!p[0];
p[1]=!p[1];
int ans=INF;
ans=min(ans,dfs(1,len,1));
for(int i=0;i<len;i++)
p[i]=s[i]-'0';
//不翻转第一张牌
ans=min(ans,dfs(1,len,0));
if(ans==INF) printf("NO\n");
else printf("%d\n",ans);
}
return 0;
}