有两种不同的状态,每种状态的转移也不同。
很适合练dp 做dp是要根据状态的类型,设计不同的数组很好的题
#include#include using namespace std;int dp[30001][2];int main(){ int n; scanf("%d",&n); int in; for(int i=1;i<=n;i++) { scanf("%d",&in); if(in==1) { dp[i][0]=dp[i-1][0]; dp[i][1]=min(dp[i-1][0],dp[i-1][1])+1; } if(in==2) { dp[i][1]=min(dp[i-1][0],dp[i-1][1]); dp[i][0]=dp[i-1][0]+1; } } printf("%d",min(dp[n][0],dp[n][1]));}