/**

UVA - 11584 划分字符串的回文串子串; 简单dp
题目大意:
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。
定义:dp[i]表示前0~i内的字符串划分成的最小回文串个数;
dp[i] = min(dp[j]+1 | j+1~i是回文串);
先预处理flag[i][j]表示以i~j内的字符串为回文串;
可以通过遍历字符串中心来处理;
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<iomanip>
using namespace std;
typedef pair<int,int> pr;
const int maxn = 1005;
const int inf = 0x3f3f3f3f;
char s[maxn];
bool flag[maxn][maxn];
int dp[maxn], ls;
void dfs(int i,int j)
{
    if(i==0||j>ls) return ;
    if(s[i]==s[j]){
        flag[i][j] = true;
        dfs(i-1,j+1);
    }
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        scanf("%s",s+1);
        ls = strlen(s+1);
  //      cout<<"ls = "<<ls<<endl;
        memset(flag,false,sizeof flag);
 
        for(int i = 1; i <= ls; i++){
            flag[i][i] = true;
            dfs(i,i+1);//令i为偶数回文串中心的左边那个;
            dfs(i-1,i+1); //令i为奇数回文串中心的中间那个;
         //   dfs(i-1,i);  不需要令i为偶数回文串中心的右边那个,因为已经令i为偶数回文串中心的左边那个;中包含了;
        }/*
        for(int i = 1; i <= ls; i++){
            for(int j = 1; j <= ls; j++){
                cout<<"i = "<<i<<"j = "<<j<<"flag[i][j] = "<<flag[i][j]<<endl;
            }
        }*/
        for(int i = 1; i <= ls; i++) dp[i] = inf;
        dp[0] = 0;
        for(int i = 1; i <= ls; i++){
            for(int j = 0; j < i; j++){
                if(flag[j+1][i])
                    dp[i] = min(dp[i],dp[j]+1);
            }
        }
 //       for(int i = 1; i <= ls; i++) cout<<"dp[i] = "<<dp[i]<<endl;
        printf("%d\n",dp[ls]);
    }
    return 0;
}

UVA - 11584 划分字符串的回文串子串; 简单dp的更多相关文章

  1. leetcode125. 验证回文串 python 简单

    125. 验证回文串 难度简单     给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: &quo ...

  2. [程序员代码面试指南]字符串问题-回文最少分割数(DP)

    问题描述 给定一个字符串,输出把它全部切成回文子串的最小分割数. 例:str="ACDCDCDAD",输出2. 解题思路 DP 存储结构 dp数组dp[len+1],dp[i]表示 ...

  3. UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)

    题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...

  4. 51Nod - 1154 回文串划分(最少回文串dp)

    回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式.   a|bb|aabaa - 3 个回文串 a|bb|a|aba|a - 5 个回文串 a|b ...

  5. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...

  6. cf1140E 回文串+染色方案dp

    有点硬核的dp..要用到一个结论.. /* 把原串拆成奇偶串,再拆成极大连续的-1串:该串两端都是非-1数,中间都是-1,并且下标要么都是偶数,要么都是技术 然后对所有这些串进行dp,dp[i][0] ...

  7. 便宜的回文串(区间DP)

    题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...

  8. (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)

    /* * POJ_1159.cpp * * Created on: 2013年10月29日 * Author: Administrator */ #include <iostream> # ...

  9. 随手练——Uva-11584 划分成回文串(区间DP)

    思路:dp[i]代表到第i位的最小值,枚举它的前几位,求出最小值. 转移方程:dp[ i ] = min(dp[ i ], dp[ j - 1 ] + 1 ) ; 本来觉得,代码加深部分可以提前bre ...

随机推荐

  1. 移动端与PHP服务端接口通信流程设计(基础版)

    针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行 ...

  2. Visual Studio 版本互转工具

    Visual Studio 版本互转工具 http://www.cnblogs.com/flydoos/archive/2011/08/20/2146121.html http://www.cnblo ...

  3. nhibernate change connection

    http://stackoverflow.com/questions/4335827/changing-nhibernate-connectionstring http://stackoverflow ...

  4. 增强学习--Q-leraning

    Q-learning 实例代码 import numpy as np import random from environment import Env from collections import ...

  5. linux导入so文件

    在linux系统中,有时候会遇到so文件丢失的问题. 此时一个常用的操作是将缺失的so文件拷贝到主机上.然后设置以下环境变量来进行导入 export LD_LIBRARY_PATH=/usr/lib/ ...

  6. Yahoo 股票数据抓取

    Yahoo提供日线级别的历史数据,包括国内外各交易所的数据,可以写爬虫抓取数据做简单的分析. api基本格式如下: http://ichart.yahoo.com/table.csv?s=<st ...

  7. nginx出现的403错误

    参考这篇文章: http://www.server110.com/nginx/201309/1792.html 我是这样解决的: 为了保证文件能正确执行,nginx既需要文件的读权限,又需要文件所有父 ...

  8. python 使用 urllib2

    使用basic auth 的3种方式 1. 设置header import urllib2 from base64 import encodestring headers = {'Content-Ty ...

  9. Unity3D教程宝典之Web服务器篇:(第一讲)服务器的架设

    转载自风宇冲Unity3D教程学院 引言:本文主要介绍WAMP服务器的架设. 第一部分WAMP介绍;第二部分WAMP安装及使用.                        第一部分WAMP介绍 什 ...

  10. linux小技巧(1)

    1.避免文件夹拼写错误 shopt命令: 演示一下: 我想进入/home文件夹可是不小心拼写错了: [fulinux@ubuntu ~]$ cd /hoem-bash: cd: /hoem: No s ...