zoukankan      html  css  js  c++  java
  • 最长公共子序列(不是子串)hdu1159

    考的是最长公共子序列+dp;
    子序列不是子串,不是子串!不连续也可以,只要a[]和b[]串共有的元素即可。
    最主要的是此类问题用dp解决。
    注意状态转移方程,dp[i][j]=dp[i-1][j-1]-1;dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
    求最长公共子序列,用一个二维数组dp[i][j]保存a[]和b[]的最长公共子序列.
    如果a[i]==b[j],则dp[i][j]=dp[i-1][j-1]+1如果a[i]!=b[j],则有dp[i][j]=max(dp[i-1][j],dp[i][j-1]),由上一结果的最大值继承而来。
    代码:

     #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    int dp[1100][1100];
    int main()
    {
    	char a[1100],b[1100];
    	int l1,l2,i,j;
    	while(~scanf("%s %s",a,b))
    	{
    		memset(dp,0,sizeof(dp));
    		l1=strlen(a),l2=strlen(b);
    		for (i=1;i<=l1;i++)
    		{
    			for (j=1;j<=l2;j++)
    			{
    				if (a[i-1]==b[j-1])
    				dp[i][j]=dp[i-1][j-1]+1;//
    				else
    				dp[i][j]=max(dp[i-1][j],dp[i][j-1]);//
    			}
    		}
    		printf("%d
    ",dp[l1][l2]);
    	}
    	return 0;
    }
  • 相关阅读:
    Java 方法重载 (Overload)
    Java 向数组中添加一个元素
    Java 三目运算符
    代理池的维护
    代理设置
    验证码识别
    使用Selenium爬取淘宝商品
    Splash API 调用
    Android ListView中Item点击事件失效解决方案
    mapreduce框架详解
  • 原文地址:https://www.cnblogs.com/shidianshixuan/p/13729731.html
Copyright © 2011-2022 走看看