70pts去重区间dp,如何改进
查看原帖
70pts去重区间dp,如何改进
768325
Herbie_ZHB楼主2024/3/23 18:28
#include<bits/stdc++.h>//思路 1.区间dp;2.去重后1.; 
using namespace std;
#define N 55
string s;
char ss[N];
int f[N][N],n;
int main(){
	cin>>s;
	n=s.length();
	int tot=0;
	ss[++tot]=s[0];
	for(int i=1;i<n;i++){
		if(s[i]!=s[i-1]){
			ss[++tot]=s[i];
		}
	}
	for(int i=1;i<=tot;i++)s[i]=ss[i];
	n=tot;
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=n;i++){
		f[i][i]=1;
	}
	for(int L=1;L<n;L++){
		for(int i=1,j=i+L;i+L<=n;i++,j++){
			if(s[i]==s[j]){
				f[i][j]=min(f[i][j],f[i+1][j-1]+1);
			}else{
				for(int k=i;k<j;k++){
					f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
				}
			}
		}
	}
	cout<<f[1][n]<<endl;
	return 0;
}
2024/3/23 18:28
加载中...