POJ1159
来源:互联网 发布:大承网络 编辑:程序博客网 时间:2024/06/01 14:26
题目大意:就是给一个字符串,然后问你加几个字符后能构成回文串;
有一个结论!需要加的字符的个数 = 原来字符串的长度 - 原来字符串和逆字符串的最长公共子序列的长度!
解释:因为当一个串和逆串的最长公共子序列确定了,那么这个最长公共子序列就已经是回文的了,
所以现在就需要加上除去回文的剩下的字符串的长度即可构成回文串;
要使用滚动数组,如果不使用的话会Memory Limit Exceeded!
解释:滚动数组!
作用范围:在递推或者是动态规划中;
作用:节约空间,但是对时间没什么优化!
列如!原来定义数组dp【5005】【5005】;肯定会超时,但是,使用滚动数组dp【2】【5005】;
因为使用的是最后一个值,所以就可以在使用的过程中对前面进行取余0和1的炒作
#include<iostream>#include<cstring>using namespace std;int dp[2][5005];int main(){char a[5005],b[5005];int i,j,k,l;while(cin>>k){cin>>a; for(i=0;i<k;i++) b[i]=a[k-i-1]; b[i]='\0'; memset(dp,0,sizeof(dp)); for(i=1;i<=k;i++) for(j=1;j<=k;j++) { if(a[i-1]==b[j-1]) dp[i%2][j]=dp[(i-1)%2][j-1]+1; else dp[i%2][j]=max(dp[(i-1)%2][j],dp[i%2][j-1]); } l=dp[(k)%2][k]; cout<<k-l<<endl;}return 0;}
0 0
- poj1159
- poj1159
- poj1159
- poj1159
- poj1159
- POJ1159
- poj1159
- poj1159
- poj1159
- POJ1159
- poj1159
- POJ1159 Palindrome
- poj1159 DP
- poj1159 - Palindrome
- POJ1159 Palindrome
- POJ1159--Palindrome
- POJ1159 Palindrome
- poj1159 LCS
- 24点
- 第一个只出现一次的字符
- yii2的分页组件
- Struts2的Interceptor中使用includeMethods 和 excludeMethods
- iOS中事件传递 及手势操作
- POJ1159
- hue相关
- Java的抽象类和接口的区别
- 数据结构-stack基本操作
- iOS 类别和扩展(Categories和Extensions)
- 【一】——C++模板
- C++ 简易的五子棋游戏 初学者
- Java基础———第一弹
- N皇后