最长公共上升子序列(LCIS)ZOJ 2432

2024-09-02 18:38

本文主要是介绍最长公共上升子序列(LCIS)ZOJ 2432,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

立方算法:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define M 505
using namespace std;
typedef long long LL;
LL a[M],b[M];
int dp[M][M];
int main()
{//freopen("in.txt","r",stdin);int T;cin>>T;while(T--){int n1,n2;cin>>n1;for(int i=1; i<=n1; i++)cin>>a[i];cin>>n2;for(int i=1; i<=n2; i++)cin>>b[i];memset(dp,0,sizeof(dp));for(int i=1; i<=n1; i++){for(int j=1; j<=n2; j++){dp[i][j]=dp[i-1][j];if(a[i]==b[j])dp[i][j]=1;if(a[i]==b[j])for(int k=1; k<j; k++){if(b[j]>b[k])dp[i][j]=max(dp[i][j],dp[i][k]+1);}}}int ans=0;for(int j=1;j<=n2;j++)if(dp[n1][j]>ans){ans=dp[n1][j];}cout<<ans<<endl;if(T)cout<<endl;}return 0;
}

平方算法:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define M 505
using namespace std;
typedef long long LL;
LL a[M],b[M];
int dp[M][M];
int main()
{//freopen("in.txt","r",stdin);int T;cin>>T;while(T--){int n1,n2;cin>>n1;for(int i=1; i<=n1; i++)cin>>a[i];cin>>n2;for(int i=1; i<=n2; i++)cin>>b[i];memset(dp,0,sizeof(dp));for(int i=1; i<=n1; i++){int max_=0;for(int j=1; j<=n2; j++){dp[i][j]=dp[i-1][j];if(a[i]>b[j]&&dp[i][j]>max_)max_=dp[i][j];else if(a[i]==b[j])dp[i][j]=max_+1;}}int ans=0;for(int i=1; i<=n2; i++)ans=max(ans,dp[n1][i]);cout<<ans<<endl;if(T)cout<<endl;}return 0;
}



这篇关于最长公共上升子序列(LCIS)ZOJ 2432的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1130753

相关文章

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

poj1330(LCA最近公共祖先)

题意:求最近公共祖先 思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;