RT,第11个测试点WA,求大佬差错
代码:
#include<bits/stdc++.h>
using namespace std;
const int INF=2e9+7;
const int N=510;
int dp[N][N];
int a[N],m[N],cost[N],n;
inline void init(){
int cnt=0;
for(int i=1;i<=n;i++){
int j=i;
int now=a[i];
while(a[j]==now)
j++;
j--;
m[++cnt]=j-i+1;
cost[cnt]=now;
i=j;
}
n=cnt;
}
int main(){
scanf("%d", &n);
for(int i=1;i<=n;i++){
scanf("%d", &a[i]);
}
init();
memset(dp,INF,sizeof(dp));
for(int i=1;i<=n;i++){
if(m[i]>=2)
dp[i][i]=1;
else
dp[i][i]=2;
}
for(int i=2;i<=n;i++){
for(int j=1;j<=n;j++){
int k=i+j-1;
if(k>n)
continue;
if(cost[j]==cost[k]){
if(m[j]+m[k]>2){
dp[j][k]=dp[j+1][k-1];
}
else{
dp[j][k]=dp[j+1][k-1]+1;
}
}
for(int s=j;s<=k;s++)
dp[j][k]=min(dp[j][k],dp[j][s]+dp[s+1][k]);
}
}
printf("%d\n", dp[1][n]);
return 0;
}