dfs hdu2209 翻纸牌游戏

xiaoxiao2021-02-27  200

hdu 2209 #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> #include <stdlib.h> using namespace std; const int inf = 1<<30; char str[30]; int a[30]; int DFS(int i,int len,int m) { if(i == len) return a[i-1]?inf:m; if(a[i-1]) { a[i-1] = !a[i-1]; a[i] = !a[i]; a[i+1] = !a[i+1]; m++; } DFS(i+1,len,m); } int main() { int i,ans,len; while(~scanf("%s",str)) { len = strlen(str); ans = inf; for(i = 0; i<len; i++) a[i] = str[i]-48; //ASCII-48来让char型数组变为int数组 也可以a[i]=str[i]-'0'; a[0]=!a[0]; a[1]=!a[1]; ans = min(ans,DFS(1,len,1));//假设第一张牌翻转 所以先让a[0],a[1]取反 for(i = 0; i<len; i++) //ans的值已经保存下来了 让数组a重新回到原始状态 a[i] = str[i]-48; ans = min(ans,DFS(1,len,0));//第一张牌没有手动翻转 if(ans == inf) printf("NO\n"); else printf("%d\n",ans); } return 0; } char类型-'0'或-48转为int型要知道!!!!!
转载请注明原文地址: https://www.6miu.com/read-12365.html

最新回复(0)