当前位置: 首页 > news >正文

【HDU 1423】Greatest Common Increasing Subsequence【LCIS 裸题】

最朴素的算法

#include<bits/stdc++.h>
using namespace std;
int lenA,lenB,T;
int a[510],b[510];
int dp[510][510];
/*
	状态:
	a数组 考虑到i 
	b数组 考虑到j且以j结尾 
*/
int main(void)
{
	ios::sync_with_stdio(false);
	cin>>T;
	while(T--)
	{
		memset(dp,0,sizeof(dp));
		cin>>lenA;
		for(int i=1;i<=lenA;i++)cin>>a[i];
		cin>>lenB;
		for(int i=1;i<=lenB;i++)cin>>b[i];
		for(int i=1;i<=lenA;i++) 
		{
			for(int j=1;j<=lenB;j++)
			{
				dp[i][j] = dp[i-1][j];
				if(a[i]==b[j])
				{
					int Max = 0;
					for(int k=1;k<j;k++)if(b[j]>b[k])
					{
						Max = max(Max,dp[i-1][k]);
					}
					dp[i][j] = Max+1;
				}
				
				
			}
		}
		int ans = 0;
		for(int i=1;i<=lenB;i++)ans = max(ans,dp[lenA][i]);
		cout<<ans<<endl;
		if(T)cout<<endl;
	}
	return 0;
}

优化!

#include<bits/stdc++.h>
using namespace std;
int lenA,lenB,T;
int a[510],b[510];
int dp[510][510];
/*
	状态:
	a数组 考虑到i 
	b数组 考虑到j且以j结尾 
*/
int main(void)
{
	ios::sync_with_stdio(false);
	cin>>T;
	while(T--)
	{
		cin>>lenA;
		for(int i=1;i<=lenA;i++)cin>>a[i];
		cin>>lenB;
		for(int i=1;i<=lenB;i++)cin>>b[i];
		for(int i=1;i<=lenA;i++) 
		{
			int Max = 0;
			for(int j=1;j<=lenB;j++)
			{
				dp[i][j] = dp[i-1][j];
				if(a[i]>b[j])Max = max(Max,dp[i-1][j]);
				if(a[i]==b[j])dp[i][j] = Max+1;				
			}
		}
		int ans = 0;
		for(int i=1;i<=lenB;i++)ans = max(ans,dp[lenA][i]);
		cout<<ans<<endl;
		if(T)cout<<endl;
	}
	return 0;
}

空间优化

    #include <stdio.h>  
    #include <string.h>  
      
    #define MAX 501  
      
    int T;  
    int seq1[MAX], seq2[MAX];  
    int len1, len2;  
    int dp[MAX];  
      
    int LCIS(){  
        int i, j;  
        int Max;  
        memset(dp, 0, sizeof(dp));  
        for (i = 1; i <= len1; ++i){  
            Max = 0;  
            for (j = 1; j <= len2; ++j){  
                if (seq1[i] > seq2[j] && Max < dp[j])  
                    Max = dp[j];  
                if (seq1[i] == seq2[j])  
                    dp[j] = Max + 1;  
            }  
        }  
        Max = 0;  
        for (i = 1; i <= len2; ++i){  
            if (Max < dp[i])  
                Max = dp[i];  
        }  
        return Max;  
    }  
      
    int main(void){  
        int i;  
        scanf("%d", &T);  
        while (T-- != 0){  
            scanf("%d", &len1);  
            for (i = 1; i <= len1; ++i)  
                scanf("%d", &seq1[i]);  
            scanf("%d", &len2);  
            for (i = 1; i <= len2; ++i)  
                scanf("%d", &seq2[i]);  
            printf("%d\n", LCIS());  
            if (T)  
                putchar('\n');  
        }  
      
        return 0;  
    }  


相关文章:

  • 【SearchString Algorithm Training】Xiper的奇妙历险(1)
  • 【SearchString Algorithm Training】谭爷剪花布条
  • 【SearchString Algorithm Training】Xiper的奇妙历险(2)
  • 【codevs 1214】线段覆盖
  • 【codevs 1643】线段覆盖 3
  • 【codevs 3012】线段覆盖 4
  • 【Codevs 3037】线段覆盖5
  • 【CodeForces 611D】Ancient Prophesy
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • LCS最长公共子序列(最优线性时间O(n))
  • 动态规划公式
  • 【DP 训练】Cake Slicing, ACM/ICPC Nanjing 2007, UVa1629
  • 【DP 训练】Folding, ACM/ICPC NEERC 2002, UVa1630
  • 【DP 训练】Stamps and Envelope Size, ACM/ICPC World Finals 1995, UVa242
  • C++ string函数 与 C字符串处理函数(整理)
  • @jsonView过滤属性
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Apache Spark Streaming 使用实例
  • canvas 五子棋游戏
  • ECMAScript入门(七)--Module语法
  • ES6之路之模块详解
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java深入 - 深入理解Java集合
  • jQuery(一)
  • node入门
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP面试之三:MySQL数据库
  • Redux系列x:源码分析
  • 给第三方使用接口的 URL 签名实现
  • 后端_MYSQL
  • 理清楚Vue的结构
  • 区块链将重新定义世界
  • 一天一个设计模式之JS实现——适配器模式
  • 仓管云——企业云erp功能有哪些?
  • 函数计算新功能-----支持C#函数
  • ​插件化DPI在商用WIFI中的价值
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (09)Hive——CTE 公共表达式
  • (39)STM32——FLASH闪存
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (LeetCode) T14. Longest Common Prefix
  • (python)数据结构---字典
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (solr系列:一)使用tomcat部署solr服务
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (新)网络工程师考点串讲与真题详解
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ./configure,make,make install的作用
  • .bat批处理(十一):替换字符串中包含百分号%的子串