poj 1159 Palindrome
2015-08-13 20:00
225 查看
题目:点击打开链接
大意:给你一条字符串,问最少需要加多少字符才能构成一个回文串
分析:就是求最长公共子序列问题,将所给字符串倒叙成一条新串,求两条串的最长公共子序列,最后 串长-子序列长
为什么这样做就行呢?原因很简单,要想回文,必须正序,倒序到一样,倒叙后求出最长公共子序列后,把剩下的不同的添上那不就是需要最少的嘛
大意:给你一条字符串,问最少需要加多少字符才能构成一个回文串
分析:就是求最长公共子序列问题,将所给字符串倒叙成一条新串,求两条串的最长公共子序列,最后 串长-子序列长
为什么这样做就行呢?原因很简单,要想回文,必须正序,倒序到一样,倒叙后求出最长公共子序列后,把剩下的不同的添上那不就是需要最少的嘛
#include<iostream> #include<string> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std; short d[5005][5005]; int n; char s1[5005],s2[5005]; int main() { while(cin>>n){ scanf("%s",s1); for(int i=0;i<n;i++) s2[i]=s1[n-i-1]; // printf("%s%s",s1,s2); memset(d,0,sizeof(d)); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(s1[i]==s2[j])d[i+1][j+1]=d[i][j]+1; else d[i+1][j+1]=max(d[i+1][j],d[i][j+1]); } } // cout<<d <<endl; cout<<n-d <<endl; } return 0; }
相关文章推荐
- poj 2349 Arctic Network
- java.lang.ClassNotFoundException: org.springframework.web.content.ContextLoaderListener
- Scala练习(十四)
- 阿里云ECSserver部署django
- 学校集训心得 DAY8.13
- C++包含函数指针的复杂定义处理办法
- 剑指offer_面试题18_树的子结构
- Android URI简介
- 超级简单的string 类型转换成char*类型的方法。
- 有哪些好的上报crash工具:推荐crashlytics
- Scala练习(十二)
- Scala练习(十一)
- BZOJ 3791 作业 DP
- 使用gem安装jekyll错误记录
- poj 3903
- 斐波那契数列
- android的camera
- 一个码农对软件项目基层人员管理的思考——会议篇
- HUNAN 11562 The Triangle Division of the Convex Polygon(大卡特兰数)
- Edittext请求输入法无效的解决方案