LightOJ-1033-区间dp,dfs

来源:互联网 发布:单片机isp是什么意思 编辑:程序博客网 时间:2024/05/16 02:42

题目大意:给定一段字符串,问最少能添加多少个字母使得这个字符串能够成为回文字符串;

题目解析:区间dp,定义dp[i][j]为把区间[i,j]中的字符全部转化为回文字符串所需要的最少次数,那么我们dfs记忆化搜索就好了;

AC代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;const int inf=0x3fffffff;char s[110];int dp[110][110];bool vis[110][110];int dfs(int l,int r){int ans=inf;if(l>=r)return 0;if(vis[l][r])return dp[l][r];if(s[l]==s[r])ans=min(ans,dfs(l+1,r-1));else ans=min(dfs(l+1,r)+1,dfs(l,r-1)+1);vis[l][r]=1;return dp[l][r]=ans;}int main(){int cas,c;scanf("%d",&cas);for(c=1;c<=cas;c++){memset(dp,0,sizeof(dp));memset(vis,0,sizeof(vis));scanf("%s",s+1);printf("Case %d: %d\n",c,dfs(1,strlen(s+1)));}return 0;}


0 0