eduCF#61 D. Magic Gems /// 區間DP
阿新 • • 發佈:2019-03-06
!= 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