Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4088 | Accepted: 1609 |
Description
Input
Output
Sample Input
0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
Sample Output
3
Hint
Source
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 8 int w[25]; 9 int flip[25]; 10 11 int get(int x) { 12 int c = w[x] + flip[x]; 13 if(x - 1 >= 1) c += flip[x - 1]; 14 if(x + 1 <= 20) c += flip[x + 1]; 15 return c % 2; 16 } 17 18 int cal() { 19 int res = 0; 20 for(int i = 2; i <= 20; ++i) { 21 if(get(i - 1)) flip[i] = 1; 22 } 23 24 if(get(20)) return -1; 25 for(int i = 1; i <= 20; ++i) res += flip[i]; 26 27 return res; 28 } 29 30 void solve() { 31 int ans = -1; 32 for(int v = 0; v <= 1; ++v) { 33 memset(flip,0,sizeof(flip)); 34 flip[1] = v; 35 int num = cal(); 36 if(num >= 0 && (ans < 0 || ans > num)) { 37 ans = num; 38 } 39 } 40 41 printf("%d\n",ans); 42 } 43 44 int main() 45 { 46 //freopen("sw.in","r",stdin); 47 for(int i = 1; i <= 20; ++i) { 48 scanf("%d",&w[i]); 49 } 50 51 solve(); 52 53 return 0; 54 }
原文:http://www.cnblogs.com/hyxsolitude/p/3632523.html