修改了一个地方,只剩 wa #10 了
```cpp
#include <bits/stdc++.h>
using namespace std;
int n,f[505][505],x,prex=0,now=0,cnt=0;
struct sect{
int num,idx;
};
sect a[505];
int main()
{
cin>>n;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)
{
cin>>x;
if(i==1)
{
now=1;
prex=x;
}
else if(x!=prex)
{
a[++cnt].idx=prex;
a[cnt].num=now;
now=1;
prex=x;
}
else
{
now++;
}
}
a[++cnt].idx=prex;
a[cnt].num=now;
n=cnt;
for(int i=1;i<=n;i++)
{
f[i][i]=3-a[i].num;
if(f[i][i]<0)f[i][i]=0;
}
for(int len=2;len<=n;len++)
{
for(int i=1;i+len-1<=n;i++)
{
int j=i+len-1;
if(a[i].idx==a[j].idx)
{
if(a[i].num+a[j].num>=3)f[i][j]=min(f[i][j],f[i+1][j-1]);
else f[i][j]=min(f[i][j],f[i+1][j-1]+1);
}
for(int k=i;k<=j-1;k++)
{
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
if(k>i)
{
if(a[i].idx==a[j].idx && a[i].idx==a[k].idx)
{
if(a[i].num+a[k].num<3 || a[k].num+a[j].num<3)
f[i][j]=min(f[i][j],f[i+1][k-1]+f[k+1][j-1]);
}
}
}
}
}
cout<<f[1][n];
return 0;
}
```
by Zhr100102 @ 2024-03-09 17:24:09
已对拍解决,注意题目只有被插入珠子的区间才能被删除,如果没有被插入过珠子,即使相同珠子数量>=3也没办法消除
by Zhr100102 @ 2024-03-09 17:48:43