Codeforces - Clear the String

題目鏈接:Codeforces - Clear the String


應該是比較暴力的區間dp了。

比如當前區間爲[l,r],那麼要麼爲1+[l+1,r],要麼找一個與str[l]相同的字母,縮掉中間的。


AC代碼:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=510;
int n,cnt,dp[N][N];	char str[N],a[N];
int solve(int l,int r){
	if(l>r)	return 0;
	if(l==r)	return dp[l][r]=1;
	if(dp[l][r]!=0x3f3f3f3f)	return dp[l][r];
	dp[l][r]=1+solve(l+1,r);
	for(int k=l+1;k<=r;k++)	
		if(str[l]==str[k])	dp[l][r]=min(dp[l][r],solve(l+1,k-1)+solve(k,r));
	return dp[l][r];
}
signed main(){
	cin>>n;	scanf("%s",a+1); memset(dp,0x3f3f3f3f,sizeof dp);
	for(int i=1;i<=n;i++)	if(a[i]!=a[i-1])	str[++cnt]=a[i]; 
	cout<<solve(1,cnt);
	return 0;
}
發佈了620 篇原創文章 · 獲贊 242 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章