1. 程式人生 > >eduCF#61 D. Magic Gems /// 區間DP

eduCF#61 D. Magic Gems /// 區間DP

!= ace char bsp clu name color 區間dp col

題目大意:

給定字符串 每次消除可消除連續的一段相同的字符的子串

求消除整個字符串的最少消除次數

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int N=500+5
; int n, dp[N][N]; char s[N]; int main() { while(~scanf("%d%s",&n,s)) { inc(i,0,n-1) dp[i][i]=1; inc(i,0,n-1) inc(j,0,i-1) { dp[j][i]=INF; inc(k,j,i-1) { // 如 “abaca” int t=dp[j][k]+dp[k+1][i-1];
// “aba” + “c” if(s[k]!=s[i]) t++; // 此時s[k]=‘a‘=s[i] 故先消“c”使得“aba”並上s[i] // 那麽s[i]就不需要重新再消一次 dp[j][i]=min(t,dp[j][i]); } } printf("%d\n",dp[0][n-1]); }
return 0; }

eduCF#61 D. Magic Gems /// 區間DP