区间dp。。
每次删一串相邻的一样的,问多少次删光。
感觉想的几乎是一样的怎么比赛时就过不了呢。。。一定是因为我挂机睡觉了
考虑l和r相等,l和l+1相等,r和r-1相等这三种情况就行了。。然后就是裸的区间dp。。
上紫计划再次流产.jpg
和bzoj1260一样的?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int dp[N][N];
int n;
string s;
int min(int a,int b,int c){
return min(a,min(b,c));
}
int main(){
ios::sync_with_stdio(false);
memset(dp,0x3f, sizeof(dp));
cin>>n>>s;
s="*"+s;
for(int i=;i<=n;i++)
dp[i][i]=;
for(int l=;l<=n;l++){
for(int i=;i<=n;i++){
int j = i+l-;
if(j>n)break;
for(int k=i;k<j;k++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]);
}
if(s[i]==s[j]){
dp[i][j]=min(dp[i+][j-]+,dp[i+][j],dp[i][j-]);
}
if(s[i]==s[i+])
dp[i][j]=min(dp[i][j],dp[i+][j]);
if(s[j]==s[j-])
dp[i][j]=min(dp[i][j],dp[i][j-]);
}
}
cout<<dp[][n];
}