70求教
查看原帖
70求教
658786
STUDENT00楼主2022/10/22 18:54

思路就是区间dp,结果70分

#include<bits/stdc++.h>
using namespace std;
int n,dp[51][51];
char c[51];
int main(){
	scanf("%s",c);
	n=strlen(c);
	for(int len=0;len<n;len++){
		for(int i=0;i<n-len;i++){
			int j=i+len;
			dp[i][j]=1e9;
			int std=c[i];
			int l=i,r=j;
			while(l<=r&&c[l]==std) l++;
			while(l<=r&&c[r]==std) r--;
			dp[i][j]=min(dp[i][j],dp[l][r]+1);
			std=c[j];
			l=i,r=j;
			while(l<=r&&c[l]==std) l++;
			while(l<=r&&c[r]==std) r--;
			dp[i][j]=min(dp[i][j],dp[l][r]+1);
		}
	}
	printf("%d",dp[0][n-1]);
	return 0;
}
2022/10/22 18:54
加载中...