Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6241 | Accepted: 2453 |
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
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<algorithm> using namespace std; const int N_MAX = 20 + 1; int pos[N_MAX]; int flip[N_MAX]; int calc(const int&first) { memset(flip,0,sizeof(flip)); pos[0] = first; int sum = 0,res = 0; for (int i = 0; i<N_MAX-1; i++) {//在末尾可以改变两个瓶子的翻转,故i<N_MAX-1,倒数第二个瓶子想反转还是可以翻转的 if ((pos[i] + sum) & 1) { res++; flip[i]++; } sum += flip[i]; if (i - 2 >= 0) sum -= flip[i - 2]; } return res; } int main() { for (int i = 1; i < N_MAX;i++) { scanf("%d",&pos[i]); } printf("%d\n",min(calc(0),calc(1))); }
原文:http://www.cnblogs.com/ZefengYao/p/6505501.html