0534:Chain
キャラクターの色が4つ以上揃ったら消していき、
残ったキャラクター数の最小値を出力する問題。
全通り試した。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int Erase(vector<int> a){ for(int i=0,j=0;j<a.size();){ if(a[j]==a[j+1])j++; else { if(j-i>2){ a.erase(a.begin()+i,a.begin()+j+1); i=j=0; } else j++,i=j; } } return a.size(); } int main(void){ int n,m; vector<int>a; while(cin >> n,n){ a.clear(); for(int i=0;i<n;i++){ cin >> m; a.push_back(m); } int ans=100000000; for(int i=0;i<a.size();i++){ int temp=a[i]; for(int j=1;j<4;j++){ if(temp!=j){ a[i]=j; ans=min(ans,Erase(a)); } } a[i]=temp; } cout << ans << endl; } return 0; }