码迷,mamicode.com
首页 > 其他好文 > 详细

hihocoder 1323 回文字符串(字符串+dp)

时间:2017-08-16 19:19:43      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:color   一个   i+1   匹配   sizeof   coder   while   比较   iostream   

题解:

比较水的题目

dp[i][j]表示[i...j]最少改变几次变成回文字符串

那么有三种转移

dp[i][j] = dp[i+1][j-1] + s[i] != s[j]

dp[i][j] = dp[i+1][j] + 1(删除左边的字符,或者在右边添加一个字符与左边匹配)

dp[i][j] = dp[i][j-1] + 1(删除右边的字符,或者在左边添加一个字符与右边匹配)

 

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char S[110];
int dp[110][110];
int dfs(int i, int j){
    if(i >= j) return 0;
    if(dp[i][j] < 100) return dp[i][j];
    dp[i][j] = min(dp[i][j], dfs(i+1, j) + 1);
    dp[i][j] = min(dp[i][j], dfs(i, j-1) + 1);
    dp[i][j] = min(dp[i][j], dfs(i+1, j-1) + (S[i] != S[j]));
    return dp[i][j];
}

int main()
{
    while(cin>>S){
        int n = strlen(S);
        memset(dp, 1, sizeof(dp));
        cout<<dfs(0, n-1)<<endl;
    }
    return 0;
}

 

hihocoder 1323 回文字符串(字符串+dp)

标签:color   一个   i+1   匹配   sizeof   coder   while   比较   iostream   

原文地址:http://www.cnblogs.com/Saurus/p/7374758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!