题意:给你一个长度为n的字符串,之后你可以进行操作,一次操作,你可以删除一段连续相同的字符串,求最小操作次数使得字符串全部被删完。
解法:考虑区间dp
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e2 + 100;
int dp[maxn][maxn];
char str[maxn];
int main(){
int n;
scanf("%d%s",&n,str+1);
for(int i = 1; i <= n; i++)dp[i][i] = 1;
for(int len = 2;len <= n; len++){
for(int l = 1; l <= n-len+1; l++){
int r = l + len - 1;
if(str[l] == str[r])dp[l][r] = dp[l + 1][r - 1] + 1;
else dp[l][r] = min(dp[l + 1][r],dp[l][r - 1]) + 1;
for(int i = l; i <= r; i++){
dp[l][r] = min(dp[l][r],dp[l][i]+dp[i][r] - 1);
}
}
}
printf("%d\n",dp[1][n]);
}