您的位置:首页 > 其它

HDU - 2209 翻纸牌游戏(贪心)

2017-08-26 10:21 405 查看

 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息