题目传送门
解题思路:
f[i][0]表示到第i个元素将本元素变为1的最佳答案,f[i][1]表示到第i个元素将本元素变为2的最佳答案.
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int n,a[300001],f[300001][2]; 7 8 int main() { 9 scanf("%d",&n); 10 for(int i = 1;i <= n; i++) 11 scanf("%d",&a[i]); 12 for(int i = 1;i <= n; i++) { 13 if(a[i] == 1) { 14 f[i][0] = f[i-1][0]; 15 f[i][1] = min(f[i-1][1],f[i-1][0]) + 1; 16 } 17 else { 18 f[i][1] = min(f[i-1][1],f[i-1][0]); 19 f[i][0] = f[i-1][0] + 1; 20 } 21 } 22 printf("%d",min(f[n][1],f[n][0])); 23 return 0; 24 }