。dp回文子串 通常在dp数组中存放的是 从i到j是否是回文子串

1.动态规划

2.中心扩展法

 #include<iostream>
 #include<algorithm>
 #include<string>
 using namespace std;
 ][] = {  };
 int main(void)
 {
     string s1;
     while (cin >> s1)
     {
         int length = s1.length();
         int i;
         ; i <= length - ; ++i)
             dp[i][i] = ;
         int j;
         ; i >=; --i)
         {
             ; j <=length-; ++j)
             {
                 if (s1[i] == s1[j])
                 {
                     dp[i][j] = dp[i + ][j - ] + ;
                 }
                 else
                 {
                     dp[i][j] = max(dp[i + ][j], dp[i][j - ]);
                 }
             }
         }
         cout << ][length - ] << endl;
     }
     ;
 }
 #include<iostream>
 #include<algorithm>
 #include<string>
 using namespace std;
 ][] = {  };
 int main(void)
 {
     string s1;
     while (cin >> s1)
     {
         int length = s1.length();
         int i;
         ; i <= length - ; ++i)
             dp[i][i] = ;
         int j;
         ; i >= ; --i)
         {
             ; j <= length - ; ++j)
             {
                 if (s1[i] != s1[j])
                 {
                     dp[i][j] = dp[i + ][j] + dp[i][j - ] - dp[i + ][j - ];
                 }
                 else
                 {
                     dp[i][j] = dp[i + ][j] + dp[i][j - ] - dp[i + ][j - ] + dp[i + ][j - ] + ;
                 }
             }
         }
         cout << ][length - ] << endl;
     }
     ;
 }
 #include<iostream>
 #include<algorithm>
 #include<string>
 using namespace std;
 ];           //长度
 bool ispalindrome(string s,int start,int end)
 {
     while (start <= end)
     {
         if (s[start] != s[end])
         {
             return false;
         }
         ++start;
         --end;
     }
     return true;
 }
 int main(void)
 {
     string s;
     while (cin >> s)
     {
         int length = s.length();
         int i;
         ; i <= length; ++i)
         {
             dp[i] = i - ;
             , i-) == true)
             {
                 dp[i] = ;
             }
         }
         int j;
         ; i <= length-; ++i)
         {
             ; j <= i; ++j)
             {
                 if (ispalindrome(s, j, i) == true)
                 {
                     dp[i + ] = min(dp[i + ], dp[j] + );
                 }
             }
         }
         cout << "需要分割的次数为" << dp[length] << "次"<<endl;
     }
     ;
 }

dp回文的更多相关文章

  1. poj 1159 dp回文串

    题意:添加最少的字符使之成为回文串 #include<cstdio> #include<iostream> #include<algorithm> #include ...

  2. POJ 3280 Cheapest Palindrome(DP 回文变形)

    题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...

  3. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

  4. HDU4745--区间DP+回文串

    这题的题意为,给你一个环状的字符串,有两只兔子分别从某任意的石头上开始跳跃.一只顺时针跳.一只逆时针跳.两只兔子每一次落脚处石头的质量都相同.兔子要一步一步的跳,且不能跳到之前跳到过的地方.总的来说, ...

  5. LightOJ - 1205:Palindromic Numbers (数位DP&回文串)

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...

  6. CodeForces-245H:Queries for Number of Palindromes(3-14:区间DP||回文串)

    Times:5000ms: Memory limit:262144 kB 给定字符串S(|S|<=5000),下标由1开始.然后Q个问题(Q<=1e6),对于每个问题,给定L,R,回答区间 ...

  7. Palindrome Partition CodeForces - 932G 回文树+DP+(回文后缀的等差性质)

    题意: 给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1].问划分的方案数. n<=1000000 题解: ...

  8. GDUT 校赛02 dp回文串

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABSkAAAIhCAIAAAAtmainAAAgAElEQVR4nOzdfaxkd33n+ZJacstqa3 ...

  9. Lightoj1205——Palindromic Numbers(数位dp+回文数)

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...

随机推荐

  1. Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)

    不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchro ...

  2. 搞懂MySQL InnoDB事务ACID实现原理

    前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...

  3. oracle数据库导出表结构步骤

    导出完成后在状态栏中显示Find

  4. (摘)C#生成随机数的三种方法

    随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当 ...

  5. web服务器负载均衡与集群基本概念一

    Web集群是由多个同时运行同一个web应用的服务器组成,在外界看来就像一个服务器一样,这多台服务器共同来为客户提供更高性能的服务.集群更标准的定义是:一组相互独立的服务器在网络中表现为单一的系统,并以 ...

  6. 豆瓣top250(go版以及python版)

      最近学习go,就找了一个例子练习[go语言爬虫]go语言爬取豆瓣电影top250,思路大概就是获取网页,然后根据页面元素,用正则表达式匹配电影名称.评分.评论人数.原文有个地方需要修改下patte ...

  7. APP请求服务器数据-HttpUrlConnection

    1. 实例化URL对象 首先第一步实例化一个URL对象,传入参数为请求的数据的网址. URL url = new URL("http://www.imooc.com/api/teacher? ...

  8. Django 信号signal

    序言 Django自带一套信号机制来帮助我们在框架的不同应用位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将信号(signals)发送给一组接收者(r ...

  9. windows docker redis

    拉取docker docker pull hub.c.163.com/library/redis:latest 启动docker docker run -p 6379:6379 -d hub.c.16 ...

  10. [LeetCode] 22. 括号生成

    题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...