思路:枚举然后深搜,时间复杂度有点高。
代码:
1 #include<cstdio>
2 #include<cstring>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 int a[25];
7 char c[25];
8 int flag;
9 int len;
10 int judge()
11 {
12 int i,j;
13 int cnt=0;
14 for(i=0;i<len;i++)
15 if (a[i])
16 cnt++;
17 if (!cnt)
18 return 1;
19 return 0;
20 }
21 void change(int i)
22 {
23 a[i]^=1;
24 if (i-1>=0)
25 a[i-1]^=1;
26 if (i+1<len)
27 a[i+1]^=1;
28 }
29 void dfs(int j,int now,int sum)
30 {
31 int i;
32 if (now==sum)
33 {
34 flag=judge();
35 return ;
36 }
37 for(i=j+1;i<len;i++)
38 {
39 change(i);
40 dfs(i,now+1,sum);
41 if (flag)
42 return ;
43 change(i);
44 }
45 }
46 int main()
47 {
48 while(scanf("%s",c)!=EOF)
49 {
50 int i,j;
51 len=strlen(c);
52 int ce=0;
53 memset(a,0,sizeof(a));
54 for(i=0;i<len;i++)
55 {
56 a[i]=c[i]-‘0‘;
57 if (a[i])
58 ce++;
59 }
60 if (!ce)
61 {
62 printf("0\n");
63 continue;
64 }
65 int sum=0;
66 flag=0;
67 for(i=0;i<len;i++)
68 {
69 dfs(-1,0,++sum);
70 if (flag)
71 break;
72 }
73 if (flag)
74 printf("%d\n",sum);
75 else
76 printf("NO\n");
77 }
78 return 0;
79 }
HDU2209 ( 翻纸牌游戏 ),布布扣,bubuko.com
时间: 2024-10-21 12:27:21