Live2d Test Env

密码脱落

(不了解区间DP的同学可以看一看 这些题,一步一步摸索)

X星球的考古学家发现了一批古代留下来的密码。 
这些密码是由A、B、C、D 四种植物的种子串成的序列。 
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。

你的任务是: 
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。

输入一行,表示现在看到的密码串(长度不大于1000) 
要求输出一个正整数,表示至少脱落了多少个种子。

例如,输入: 
ABCBA 
则程序应该输出: 
0

再例如,输入: 
ABECDCBABC 
则程序应该输出: 
3

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<memory>
using namespace std;
const int maxn=1010;
int dp[maxn][maxn];
char c[maxn];
int main()
{
    int i,j,k,L;
    scanf("%s",c+1);
    L=strlen(c+1);
    for(i=L-1;i>=1;i--)
     for(j=i+1;j<=L;j++)
     {
         dp[i][j]=dp[i+1][j]+1;
         dp[i][j]=min(dp[i][j],dp[i][j-1]+1);
         if(c[i]==c[j]) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
     }
    printf("%d\n",dp[1][L]);
}

 

posted @ 2017-10-21 13:02  nimphy  阅读(660)  评论(0编辑  收藏  举报