直接判断两端颜色是否相同,然后直接记忆化搜索就可以了。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
#define maxn 110
int dp[maxn][maxn];
char st[maxn];
int n,siz[maxn],num[maxn];
int dfs(int l,int r)
{
if(l>r) return 0;
if(l==r) return 1;
if(dp[l][r]) return dp[l][r];
int tmp=r-l+1;
for(int i=l;i<r;i++)
{
tmp=min(tmp,dfs(l,i)+dfs(i+1,r)-(st[l]==st[r]));
}
return dp[l][r]=tmp;
}
int main()
{
scanf("%s",st+1);
n=strlen(st+1);
int tmp;
dfs(1,n);
printf("%d\n",dp[1][n]);
return 0;
}

本文介绍了一种使用记忆化搜索算法解决两端颜色匹配问题的方法。通过递归地检查字符串两端的颜色是否相同,并利用动态规划减少重复计算,有效地解决了问题。文章提供了完整的C++实现代码。
1518

被折叠的 条评论
为什么被折叠?



