P4170[CQOI2007]涂色
看到此题口胡了一个思路,即先将同颜色的连续木板合并,再通过O(n2)的复杂度解决问题,于是便有了如下代码
#include<bits/stdc++.h>
using namespace std;
string s,S;
int n,j,f[4100][4100];
int main()
{
cin>>s,s=" "+s;
for(int i=1;i<s.size();i++)if(s[i]!=s[i-1])S=S+s[i];
n=S.size(),S=" "+S;
for(int i=1;i<=n;i++)f[i][i]=1;
for(int l=1;l<=n;l++)
for(int i=1;i<=n-l+1;i++)
{
j=i+l-1;
f[i][j]=min(f[i+1][j]+1,f[i][j-1]+1);
if(S[i]==S[j])f[i][j]=min(f[i][j],f[i+1][j-1]+1);
}
cout<<f[1][n];
return 0;
}
私以为思路正确,样例也正确,不料得分只有70。看过题解后理解了题解的DP思路,但对于我错误的原因始终无法理解,求各位大神给出反例或错误的原因,如果可以的话,能否修正该代码使其正确?感激不尽