#include <bits/stdc++.h>
using namespace std;
const int maxn = 25;
char s[maxn];
int card[maxn];
int len;
int INF = 99999999;
int dfs(int idx, int cnt) {
if(idx == len ) {
if(card[idx-1] == 0)
return cnt;
else
return INF;
}
//idx可以翻
if(card[idx-1] == 1) {
//翻
card[idx-1] = !card[idx-1];
card[idx] = !card[idx];
card[idx+1] = !card[idx+1];
return dfs(idx+1, cnt+1);
//不翻
card[idx-1] = !card[idx-1];
card[idx] = !card[idx];
card[idx+1] = !card[idx+1];
return dfs(idx+1, cnt);
} else {//不可以翻
return dfs(idx+1, cnt);
}
}
int main() {
//freopen("data.in", "r", stdin);
while(scanf("%s", s) == 1) {
len = strlen(s);
//printf("len = %d\n", len);
for(int i = 0; i < len; ++i) {
card[i] = s[i] - '0';
}
//开头第1张牌翻
card[0] = !card[0];
card[1] = !card[1];
int ans = INF;
ans = min(ans, dfs(1, 1));
for(int i = 0; i < len; ++i) {
card[i] = s[i] - '0';
}
//开头第1张牌不翻
ans = min(ans, dfs(1, 0));
if(ans == INF) {
printf("NO\n");
} else {
printf("%d\n", ans);
}
}
}
HDU 2209 翻纸牌游戏(DFS)
最新推荐文章于 2021-05-15 16:09:10 发布