http://poj.org/problem?id=1458

一道容易的DP,求最长公共子序列的

dp[i][j],代表str1中的第i个字母和str2中的第j个字母的最多的公共字母数

 #include <stdio.h>
#include <iostream>
#include <string.h> using namespace std;
int dp[][]={}; int main()
{
char str1[],str2[];
while(~scanf("%s %s",str1,str2))
{
/* scanf("%s",str1)
scanf("%s",str2);*/
int len1=strlen(str1);
int len2=strlen(str2);
for(int i=;i<=len1;i++)
for(int j=;j<=len2;j++)
{
if(str1[i-]==str2[j-]) dp[i][j]=dp[i-][j-]+; //这个就是那个递推公式,但str1[i-1]和str2[j-1]想等于时dp[i][j]就会等于前一个加一,不等就是等于前面的最大的一个
else dp[i][j]=max(dp[i-][j],dp[i][j-]);
}
printf("%d\n",dp[len1][len2]);
}
return ;
}

http://poj.org/problem?id=1159

这个是POJ1159的题目,试求插入的最少的字符,使其变成回文字符串

这个最少的字符MIN=N-N和N的逆序数的最长公共子序列

所以这道题也就是和上面的那个题目一样,求最长的公共子序列,不过有一个地方比上面要特殊一点,就是数组只可以开滚动数组,不然POJ就爆内存

也只是在部分地方进行了改动即可

在这里也使用了一个我以前从未用过的函数,reverse ,这个函数在algorithm的头文件里

作用是把远数组变成逆序的,使用方法也就是reverse(begin(),end());

 #include <stdio.h>
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm> using namespace std; int dp[][];
string str1,str2; int main(){
int n;
while(scanf("%d",&n)!=EOF){
cin>>str1;
str2=str1;
memset(dp,,sizeof(dp));
reverse(str2.begin(),str2.end());
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(str1[i-]==str2[j-]){
int tem=dp[(i-)%][j-]+; //这个和上面的不同的原因在于这个是滚动数组,而滚动数组的话,原数组一般都是有值的,只不过是新的值在原数组上进行覆盖而已,求最大的公共子序列,就不能排除原来的数组的dp[i%2][j]会小于tmp;
dp[i%][j]=max(dp[i%][j],tem);
}
else dp[i%][j]=max(dp[(i-)%][j],dp[i%][j-]);
}
cout<<n-dp[n%][n]<<endl;
}
return ;
}

POJ 1458 1159的更多相关文章

  1. LCS POJ 1458 Common Subsequence

    题目传送门 题意:输出两字符串的最长公共子序列长度 分析:LCS(Longest Common Subsequence)裸题.状态转移方程:dp[i+1][j+1] = dp[i][j] + 1; ( ...

  2. POJ 1458 Common Subsequence(LCS最长公共子序列)

    POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...

  3. POJ 1458 最长公共子序列(dp)

    POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...

  4. POJ 1458 Common Subsequence (动态规划)

    题目传送门 POJ 1458 Description A subsequence of a given sequence is the given sequence with some element ...

  5. HDU 1159 &amp;&amp; POJ 1458

    最长公共子序列.状态转移方程见代码. #include <iostream> #include <cstdio> #include <cstring> using ...

  6. HDU 1159 Common Subsequence(POJ 1458)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  7. POJ 1458 Common Subsequence (zoj 1733 ) LCS

    POJ:http://poj.org/problem?id=1458 ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=73 ...

  8. OpenJudge/Poj 1458 Common Subsequence

    1.链接地址: http://poj.org/problem?id=1458 http://bailian.openjudge.cn/practice/1458/ 2.题目: Common Subse ...

  9. poj 1458 Common Subsequence(区间dp)

    题目链接:http://poj.org/problem?id=1458 思路分析:经典的最长公共子序列问题(longest-common-subsequence proble),使用动态规划解题. 1 ...

随机推荐

  1. yum管理

    一.yum发展与作用     在linux系统维护中管理员经常遇到软件包的依赖问题,有时无法解决,比如你在安装库文件时常出现报错问题,说依赖其它软件包.由于这个问题一直困绕linux的广大爱好者,开源 ...

  2. C语言打乱一组数字顺序

    #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int m ...

  3. 代码中access 的使用

     C++代码:if(access(strZip.c_str(), 0) == 0){...}    此处为判断strZip中文件是否存在   .c_str() 是他自身字符串名称,该名称是一个压缩文件 ...

  4. Genymotion启动时出现错误virtualization engine not found

    打开VirtualBox,管理-全局设定,网络,仅主机“Host-only”网络,需要的设置如下

  5. C#深入浅出 关键字(一)

    1.this this关键字用于指示当前对象“自己”,来看一个例子,了解什么时候需要用this class Star { String name; int age; public void SetIn ...

  6. POJ 2054 Color a Tree

    贪心....                    Color a Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:  ...

  7. 【C语言入门教程】4.4 指针 与 指针变量

    在程序中声明变量后,编译器就会为该变量分配相应的内存单元.也就是说,每个变量在内存会有固定的位置,有具体的地址.由于变量的数据类型不同,它所占的内存单元数也不相同.如下列声明了一些变量和数组. int ...

  8. php 通过curl post发送json数据实例

    例1  代码如下 复制代码 $data = array("name" => "Hagrid", "age" => "3 ...

  9. ubutu之mysql emma中文乱码问题解决

    emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python).apt-get安装emmasudo apt-get install emma    ...

  10. mongodb安装 window

    安装MongoDB 1.按照操作系统下载http://www.mongodb.org/downloads. 2.在D盘新建MongoDB文件夹(此文件夹为自定义的数据库安装目录D:\MongoDB)把 ...