zoukankan      html  css  js  c++  java
  • [Poj #2127] Greatest Common Increasing Subsequence

    CLASSIC!!!
    最长公共上升子序列
    转移方程:dp[i][j]=max{dp[i-1][k]}+1 (仅a[i]==b[j]时转移)
    滚动数组滚动掉i(因为分析i时只用到i-1)
    然后记一下dp[i][j]是从谁转移出来的
    开一个栈,倒序输出答案即可

    #include<cstdio>
    using namespace std;
    int a[550];
    int b[550];
    int dp[550];
    int pre[550][550];
    int seq[550],top;
    int main()
    {
    	int n,m,i,j,k,x,y,z,mx,lst;
    	scanf("%d",&n);
    	for(i=1;i<=n;i++)scanf("%d",&a[i]);
    	scanf("%d",&m);
    	for(i=1;i<=m;i++)scanf("%d",&b[i]);
    	for(i=1;i<=n;i++)
    	{
    		mx=lst=0;
    		for(j=1;j<=m;j++)
    		{
    			if(a[i]==b[j])
    			{
    				dp[j]=mx+1;
    				pre[i][j]=lst;
    			}
    			if(a[i]>b[j]&&mx<dp[j])
    			{
    				mx=dp[j];
    				lst=j;
    			}
    		}
    	}
    	mx=lst=0;
    	for(i=1;i<=m;i++)
    	{
    		if(mx<dp[i])
    		{
    			mx=dp[i];
    			lst=i;
    		}
    	}
    	printf("%d
    ",mx);
    	x=n;y=lst;
    	top=0;
    	for(i=mx;i>=1;i--)
    	{
    		while(a[x]!=b[y])x--;
    		seq[++top]=b[y];
    		y=pre[x][y];
    		x--;
    	}
    	for(i=top;i>=1;i--)
    	printf("%d ",seq[i]);
    	printf("
    ");
    	return 0;
    }
    /*
    //sample
    5
    1 4 2 5 -12
    4
    -12 1 2 4
    SPJ.
    */
    
  • 相关阅读:
    PostGIS常用SQL
    PostGIS相关数据类型及内置函数介绍
    基于GeoTools做GeoJson,PostGIS,Shapefile的转换
    如何使用GeoTools
    JavaScript 循环
    jquery 层级选择器
    jquery 表单选择
    js 字符串操作
    js对象
    js函数 作用域 闭包 回调
  • 原文地址:https://www.cnblogs.com/Rain142857/p/11735017.html
Copyright © 2011-2022 走看看