dp回文
。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回文的更多相关文章
- poj 1159 dp回文串
题意:添加最少的字符使之成为回文串 #include<cstdio> #include<iostream> #include<algorithm> #include ...
- POJ 3280 Cheapest Palindrome(DP 回文变形)
题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...
- poj 3280 Cheapest Palindrome ---(DP 回文串)
题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...
- HDU4745--区间DP+回文串
这题的题意为,给你一个环状的字符串,有两只兔子分别从某任意的石头上开始跳跃.一只顺时针跳.一只逆时针跳.两只兔子每一次落脚处石头的质量都相同.兔子要一步一步的跳,且不能跳到之前跳到过的地方.总的来说, ...
- LightOJ - 1205:Palindromic Numbers (数位DP&回文串)
A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...
- 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,回答区间 ...
- Palindrome Partition CodeForces - 932G 回文树+DP+(回文后缀的等差性质)
题意: 给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1].问划分的方案数. n<=1000000 题解: ...
- GDUT 校赛02 dp回文串
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABSkAAAIhCAIAAAAtmainAAAgAElEQVR4nOzdfaxkd33n+ZJacstqa3 ...
- Lightoj1205——Palindromic Numbers(数位dp+回文数)
A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...
随机推荐
- Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)
不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchro ...
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- oracle数据库导出表结构步骤
导出完成后在状态栏中显示Find
- (摘)C#生成随机数的三种方法
随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当 ...
- web服务器负载均衡与集群基本概念一
Web集群是由多个同时运行同一个web应用的服务器组成,在外界看来就像一个服务器一样,这多台服务器共同来为客户提供更高性能的服务.集群更标准的定义是:一组相互独立的服务器在网络中表现为单一的系统,并以 ...
- 豆瓣top250(go版以及python版)
最近学习go,就找了一个例子练习[go语言爬虫]go语言爬取豆瓣电影top250,思路大概就是获取网页,然后根据页面元素,用正则表达式匹配电影名称.评分.评论人数.原文有个地方需要修改下patte ...
- APP请求服务器数据-HttpUrlConnection
1. 实例化URL对象 首先第一步实例化一个URL对象,传入参数为请求的数据的网址. URL url = new URL("http://www.imooc.com/api/teacher? ...
- Django 信号signal
序言 Django自带一套信号机制来帮助我们在框架的不同应用位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将信号(signals)发送给一组接收者(r ...
- windows docker redis
拉取docker docker pull hub.c.163.com/library/redis:latest 启动docker docker run -p 6379:6379 -d hub.c.16 ...
- [LeetCode] 22. 括号生成
题目链接:https://leetcode-cn.com/problems/generate-parentheses/ 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能 ...