首页 > 其他分享 >DP19 最长公共子序列(一)C

DP19 最长公共子序列(一)C

时间:2024-02-19 15:45:02浏览次数:28  
标签:return int char DP19 maxn 序列 最长 1001

建议直接网上看思路....

#include<stdio.h>

int max(int i,int j){
    if(i>j) return i;
    return j;
}
int maxlength[1001][1001];
int main(){
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF){
        char c=getchar();//读取换行
        char c1[1001];
        char c2[1001];
        for(int i=0;i<n;i++){
            scanf("%c",&c1[i]);
        }
        char z=getchar();//读取换行
        for(int i=0;i<m;i++){
            scanf("%c",&c2[i]);
        }
        for(int i=0;i<n;i++) maxlength[i][0]=0;
        for(int i=0;i<m;i++) maxlength[0][i]=0;
        for(int i=1;i<n;i++){
            for(int j=1;j<m;j++){
                if(c1[i-1]==c2[j-1]){
                    maxlength[i][j]=maxlength[i-1][j-1]+1;
                }else{
                    maxlength[i][j]=max(maxlength[i][j-1],maxlength[i-1][j]);
                }
            }
        }
        int maxn=maxlength[0][0];
        for(int i=1;i<n;i++){
            for(int j=1;j<m;j++){
                if(maxlength[i][j]>maxn) maxn=maxlength[i][j];
            }
        }
        printf("%d\n",maxn);
    }
    return 0;

结果:

标签:return,int,char,DP19,maxn,序列,最长,1001
From: https://www.cnblogs.com/llllmz/p/18021262

相关文章

  • KY78 最大上升子序列和C++
    这个解决问题的思路使用动态规划,即用已知状态去得到未知状态。思路逻辑是这样sum[i]记录以A[i]为末上升子序列的和的最大值然后从j从0-i-1遍历如果A[j]<A[i]那么sum[i]=sum[j]+A[i];然后找出sum[i]中的的最大值,就是以A[i]为末上升子序列的和的最大值。这样就实现了从前......
  • day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列
    题目:491.非递减子序列我的感悟:难不怕,不行就抄一遍,再默写一遍,多记忆几遍。加油!!!理解难点:uset是本层的, res收获的是节点(满足要求的节点),不用return(用了return是仅仅收集叶子节点的)判断的逻辑,是nums[i]当前的节点和目标的path的区别代码示例:classSolution:......
  • P3411 序列变换 题解
    自己做不出来,看现在题解区的题解讲的都不咋清楚。懂了之后来为后人铺路。而且我的马蜂比较好看题目传送门我能看懂这道题,主要是依靠了这篇题解的帮助。首先我们只关注数的相对关系,所以可以离散化。注意到值域\(10^6\),用数组离散化。这道题可以用贪心做。(有一些定义先往下看)......
  • JAVA基础-序列化
    1,什么是序列化?Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。2,序列化的使用场景永久性保存对象,保存对的字节序列到本地文件或者数据库中;通过序列化以字节流的形式对象在网络中进行传递和接收;通过序列化在进程间传递......
  • 递增子序列--连续与不连续
    问题一:最长严格递增子序列的长度题目:给定一个整数数组nums,找到其中最长严格递增子序列的长度。状态定义:dp[i]表示以nums[i]结尾的最长严格递增子序列的长度。状态转移方程对于每个nums[i],遍历其之前的所有元素nums[j](j从0到i-1),如果nums[i]>nums[j],则可以考虑......
  • KY22 最大序列和C
    题目例子给的很好,还有不要遗漏全是负数的情况。#include<stdio.h>#include<math.h>intmain(){longlongn=0;while(scanf("%ld",&n)!=EOF){longlongsum=0;longlongmax=0;inttag=0;longlongmaxn=pow(-2,63);......
  • 代码随想录算法训练营第十八天 | 112. 路径总和,113. 路径总和ii ,106.从中序与后序遍
     513.找树左下角的值 已解答中等 相关标签相关企业 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层最左边 节点的值。假设二叉树中至少有一个节点。 示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,n......
  • P2757 [国家集训队] 等差子序列
    题目的等差子序列最少只要求长度为3,那么其实就转化为对于一个数是否存在左右各一个与它差值相等的一对数,比如14325中1,5对3来说就如此。这样的关系放到数轴上就是是否存在一对数到某数的距离相等。由于题目明确是一个排列,也就是1到n所有数一定会出现一次,那么对于某数,它左边的......
  • P1439 【模板】最长公共子序列
    首先找最大公共子序列,可以轻松想到$O(n^2)$的dp转移式子,$f_{i,j}=max\begin{cases}f_{i-1,j}&i>0\f_{i,j-1}&j>0\f_{i-1,j-1}+1&i>0,j>0,A_i=A_j\end{cases}$但是我们发现最后$n\le10^5$所以$n^2$的复杂度不够优,这个时候再看题目,发现A,B都是 1~n的排列,由此可知A,B......
  • 【常见问题】Java 8 date time type `java.time.LocalDateTime` not supported by def
    问题描述将一个包含LocalDateTime对象的集合进行序列化和反序列化时,可能会遇到以下异常:Causedby:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:Java8date/timetype`java.time.LocalDate`notsupportedbydefault:addModule"com.fasterxml.jack......