博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电1159 Common Subsequence【最长公共子序列】
阅读量:5136 次
发布时间:2019-06-13

本文共 1100 字,大约阅读时间需要 3 分钟。

题目链接:

解题思路:任意先给出两个字符串 abcfbc abfcab,用dp[i][j]来记录当前最长的子序列,则如果有x[i]与y[j]相等的话,则相当于公共子序列的长度在dp[i-1][j-1]上增加1,

如果x[i]与y[j]不相等的话,那么dp[i][j]就取得dp[i][j-1]和dp[i-1][j]中的最大值即可。时间复杂度为O(mn)

反思:大概思路想出来之后,因为dp数组赋初值调了很久,dp初值调出来之后,提交发现数组的长度开得不够,改二维数组的长度又改了好久,最后弄成全局变量,水过.

#include
#include
int dp[1001][1001];int max(int m,int n){ if(m>n) return m; else return n;}int main(){ char a[1000],b[1000]; int len1,len2; while(scanf("%s %s",&a,&b)!=EOF) { int i,j; len1=strlen(a); len2=strlen(b); for(i=0,j=0;j<=len2;j++) dp[i][j]=0; for(j=0,i=0;i<=len1;i++) dp[i][j]=0; for(i=0;a[i]!='\0';i++) { for(j=0;b[j]!='\0';j++) { if(a[i]==b[j]) { dp[i+1][j+1]=dp[i][j]+1; } else { dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]); } } } printf("%d\n",dp[i][j]); }}

  

          

 

转载于:https://www.cnblogs.com/wuyuewoniu/p/4082599.html

你可能感兴趣的文章
Python学习---生成器的学习1210
查看>>
设置eclipse启动时所需要的jdk
查看>>
SQLServer分页存储过程
查看>>
PHP平均小数红包算法
查看>>
IntelliJ IDEA 2017.3 配置Tomcat运行web项目教程(多图)
查看>>
蛋痛的C#和.net,采集问题(小数点)
查看>>
zabbix使用percona插件监控mysql
查看>>
反转String 1
查看>>
[文章]大数据实时处理:百分点实时计算架构和算法
查看>>
tomcat放置静态html页面
查看>>
【Demo 0012】进程与线程
查看>>
开发ActiveX控件调用另一个ActiveX系列3——ActiveX调用另一个ActiveX
查看>>
UIBezierPath的使用(持续更新)
查看>>
《天道》经典语录
查看>>
APPlication,Session,Cookie,ViewState和Cache之间的区别
查看>>
课程五
查看>>
AGAL寄存器
查看>>
8月2
查看>>
面向对象
查看>>
Linux内核 TCP/IP、Socket参数调优
查看>>