HDU1423 Greatest Common Increasing Subsequence(最长公共递增子序列)
来源:互联网 发布:java 解析swf 编辑:程序博客网 时间:2024/05/22 06:44
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence.
Input
Each sequence is described with M - its length (1 <= M <= 500) and M integer numbers Ai (-2^31 <= Ai < 2^31) - the sequence itself.
Output
output print L - the length of the greatest common increasing subsequence of both sequences.
Sample Input
1
5
1 4 2 5 -12
4
-12 1 2 4
Sample Output
2
题意:在找出最长公共子序列的基础上加一个条件————找出最长递增公共子序列 的长度
解题思路:
模拟下人脑的思路~
从第一个序列中的第一个数开始依次给第二个序列中的每个数比较,在第二个序列的每个数都记录下每次比较后的序列的最大长度
dp[]表示到第i个数时序列的最大长度
k用来记录 判断每个数之前的序列的最大长度
AC代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ int t,n,m,sum; int a[5200],b[5200],dp[5200];//dp表示到当前数字使公共序列的长度最长是多少 scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%d",&m); for(int j=1;j<=m;j++) scanf("%d",&b[j]); sum=0; for(int i=1;i<=n;i++) { int k=0;//在判断每个数时k将每次之前的最大长度记录下来带到这个数面前, //如果这个数在a,b序列中同时存在并且可以使长度+1,则更新这个数的dp值 for(int j=1;j<=m;j++) { if(a[i]==b[j]&&dp[j]<k+1) dp[j]=k+1;//如果这个数两个序列都存在并且能使长度+1 else if(a[i]>b[j])//k值记录下本次循环到这个数前最大的长度 { if(dp[j]>k) k=dp[j]; } sum=max(sum,dp[j]);//sum记录下最长长度 } } printf("%d\n",sum); if(t) printf("\n"); } return 0;}
蟹蟹小淑女学长~
阅读全文
0 0
- Greatest Common Increasing Subsequence hdu1423 最长公共递增子序列
- Greatest Common Increasing Subsequence(最长单调递增公共子序列+hdu1423)
- hdu1423 Greatest Common Increasing Subsequence(最长递增公共子序列)
- HDU1423 Greatest Common Increasing Subsequence(最长公共递增子序列)
- hdu1423---Greatest Common Increasing Subsequence(最长公共上升子序列)
- HDU1423&ZOJ2432 - Greatest Common Increasing Subsequence(LCIS最长公共上升子序列模板)
- 最长公共上升子序列——hdu1423 Greatest Common Increasing Subsequence
- poj 2127 Greatest Common Increasing Subsequence (最长公共递增子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共递增子序列lcis)
- 最长单调递增公共子序列(路径记录+poj2127+zoj2432)Greatest Common Increasing Subsequence
- HDU 1423 Greatest Common Increasing Subsequence 最长公共递增序列
- hdu1423Greatest Common Increasing Subsequence(最长公共递增子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共递增子序列LICS)
- Greatest Common Increasing Subsequence-最长公共上升子序列
- HDU 1423 Greatest Common Increasing Subsequence(单调递增公共子序列)
- HDU 1423 Greatest Common Increasing Subsequence(最长公共上升子序列)
- hdu 1423 Greatest Common Increasing Subsequence(最长公共上升子序列、LCIS)
- zoj 2432 Greatest Common Increasing Subsequence(最长公共上升子序列)
- ubuntu boot 空间不足
- 关于QT5使用wamp的mysql连接问题
- c语言入门:c++运算符重载
- jquery ajax error函数和及其参数详细说明
- CSS总结-----定位与盒子图
- HDU1423 Greatest Common Increasing Subsequence(最长公共递增子序列)
- 数据库那点事(Mysql)-5
- github删除某个文件夹(文件)
- GCC/G++ + sublime text3 + powershell在windows使用指南
- 台湾大学机器学习基石lecture1小结
- 38. Count and Say
- ajax跨域,以及在laravel中实现跨域
- ArrayList的学习笔记
- JQuery实现注册表单页面 4 代码