dp
作者:
MongoRolls
,
2025-03-09 20:54:37
· 广东
,
所有人可见
,
阅读 4
水题
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e17;
void solve(){
int n;
cin>>n;
vector<int> a(n+1);
for(int i=1;i<=n;i++) cin>>a[i];
vector<vector<int>> dp(n+1,vector<int> (3,INF));
dp[0][0]=0;
for(int i=1;i<=n;i++){
if(!a[i]){
dp[i][0]=min({dp[i-1][1],dp[i-1][0]});
continue;
}
dp[i][0]=min(dp[i][0],dp[i-1][0]+1);
if(a[i]<=2){
dp[i][1]=min({dp[i][1],dp[i-1][0]+1,dp[i-1][2]+1});
dp[i][0]=min({dp[i][0],dp[i-1][1]});
}else if(a[i]<=4){
dp[i][2]=min(dp[i][2],dp[i-1][1]+1);
dp[i][1]=min(dp[i][1],dp[i-1][2]+1);
}
}
cout<<min({dp[n][0]})<<"\n";
}
signed main(){
int t;
cin>>t;
while(t--){
solve();
}
}