src2020/2862_cow/main.cpp
2020-05-03 11:15:55 +08:00

62 lines
1.6 KiB
C++

#include <iostream>
using namespace std;
int mins(int yi,int er){
return yi<er? yi:er;
}
int main()
{
int n,a[30001]={0};
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int f[30001][4]={0};
for(int i=1;i<=n;i++){
for(int j=1;j<=3;j++){
if(j>i){
for(int k=j;k<=3;k++){
f[i][k]=f[i][j-1];
}
break;
}
bool bian=0;
if(a[i]!=j){
bian=1;
}
int last=j-1;
if(j-1<1) last=j;
int last2=j-2;
if(j-2<1) last2=j;
f[i][j]=mins(f[i-1][last]+bian,f[i-1][j]+bian);
f[i][j]=mins(f[i-1][last2]+bian,f[i][j]);
// cout<<f[i][j]<<" ";
}
// cout<<endl;
}
int ans=mins(mins(f[n][1],f[n][2]),f[n][3]);
int h[30001][4]={0};
for(int i=1;i<=n;i++){
// cout<<endl;
for(int j=3;j>=1;j--){
if(3-j+1>i){
for(int k=j;k>=1;k--){
h[i][k]=h[i][j-1];
}
break;
}
bool bian=0;
if(a[i]!=j){
bian=1;
}
int last=j+1;
if(j+1>3) last=j;
int last2=j+2;
if(j+2>3) last2=j;
h[i][j]=mins(h[i-1][last]+bian,h[i-1][j]+bian);
h[i][j]=mins(h[i-1][last2]+bian,h[i][j]);
// cout<<h[i][j]<<" ";
}
}
cout<<mins(mins(h[n][2],h[n][3]),mins(ans,h[n][1]));
}