zoukankan      html  css  js  c++  java
  • 32-回文字符串(dp)

    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=37

                      回文字符串

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
     
    输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数
    样例输入
    1
    Ab3bd
    样例输出
    2
    来源
    IOI 2000
    上传者
    hzyqazasdf
    思路:先前出该字符串的最大回文字串,该串除了最大回文串后剩余的不是回文,其实就添加字符使其成为回文,不能该影响最大的那个串,故只能在对应位置上配相同的字符
    使得剩余的字符成为回文。
    #include <iostream>
    #include <cstring>
    using namespace std;
    int dp[1005][1003];
    string str;
    
    int fun(int i, int j){
    	if(i > j){
    		return 0;
    	}
    	if(dp[i][j])
    		return dp[i][j];
    	if(i == j)
    		return dp[i][j] = 1;
    	if(str[i] == str[j])
    		return dp[i][j] = fun(i + 1, j - 1) + 2;
    	else
    		return dp[i][j] = max(fun(i + 1, j), fun(i, j - 1));
    }
    
    int main(){
    	std::ios::sync_with_stdio(false); 
    	int t;
    	cin >> t;
    	while(t--){
    		cin >> str;
    		memset(dp, 0, sizeof(dp));
    		int ans = fun(0, str.length() - 1);
    //		cout << ans << endl; 
    		cout << str.length() - ans << endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Django学习(二) Django框架简单搭建
    Django学习(一) Django安装配置
    Python学习(一) Python安装配置
    注册第一天,纪念一下
    小程序笔记
    详解HTML5中的进度条progress元素简介及兼容性处理
    服务管理
    yum
    管道,输出,管道,重定向,grep
    VIM
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8654774.html
Copyright © 2011-2022 走看看