poj 2127 lcis wa

#include<iostream>
#include<cstdio>
#include<stack>
#include<algorithm>
#include<cstring>

using namespace std;

typedef long long ll;
const int maxn = 505;
const ll one = 1;
const ll inf = one << 32;
ll n1, n2, a[maxn], b[maxn];
ll l[maxn][maxn];
struct xx{
    int i, j;
}pre[maxn][maxn], ind[maxn];

int insert_(ll *la, int p, int i, int j, ll e){
    while(la[p] < e) p++;
    la[p]=e;
    ind[p]=(xx){i, j};
    if(p) pre[i][j]=ind[p-1];
    return p;
}

void lcis(){
    int i, j, x, p=0;
    for(i=0; i<n2; i++)
        fill_n(l[i], n2, inf);

    memset(pre, -1, sizeof(pre));

    for(i=0; i<n1; i++){
        x=-1, p=0;
        for(j=0; j<n2; j++){
            if(a[i]==b[j]) x=p=insert_(l[j], p, i, j, a[i]);
            else{
                if(x!=-1 && l[j][x]>l[j-1][x]) l[j][x]=l[j-1][x];
                else x=-1;
            }
        }
    }
}

void print(){
    int t, j, i;
    for(j=n2-1; j>-1; j--) if(l[n2-1][j]!=inf)
        break;
    stack<ll> s;
    printf("%d\n", j+1);
    i = ind[j].i;   j=ind[j].j;
    while(i > -1){
        s.push(a[i]);
        t=pre[i][j].i;  j=pre[i][j].j;
        i=t;
    }
    while(!s.empty()){
        printf("%lld", s.top());  s.pop();
        printf("%c", s.empty()?‘\n‘:‘ ‘);
    }
}

int main(){
    while(scanf(" %lld", &n1)==1){
        for(int i=0; i<n1; i++) scanf(" %lld", a+i);
        scanf(" %lld", &n2);
        for(int i=0; i<n2; i++) scanf(" %lld", b+i);
        lcis();
        print();
    }
    return 0;
}

to be continued;

poj 2127 lcis wa

时间: 2025-01-18 09:07:41

poj 2127 lcis wa的相关文章

POJ 2127 LCIS DP

http://poj.org/problem?id=2127 #include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <cstdio> #include <map> #include <vector> using namespace std; const int N=5e2+20; const int inf

POJ 2127 最长公共上升子序列

动态规划法: #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #inc

POJ 2127

1 #include <iostream> 2 #define MAXN 501 3 using namespace std; 4 5 int a[MAXN],b[MAXN],ans[MAXN]; 6 7 int GCIS(int l1, int *a, int l2, int *b); 8 9 int main() 10 { 11 //freopen("acm.acm","r",stdin); 12 int l_1; 13 int l_2; 14 in

poj2127——LCIS

题目:http://poj.org/problem?id=2127 LCIS,注意存储路径的方法. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; ll n,a[505],m,b[505],f[505][505],mx,pre[505][505],ans,y,st,print[505]; //void print(l

HDU 1535 Invitation Cards (POJ 1511)

两次SPFA.求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换,但是这个有1000000个点,矩阵开不了. d1[]为 1~N 的最短路. 将所有边的 邻点 交换. d2[] 为 1~N 的最短路. 所有相加为 所要答案. 忧伤的是用SPFA  "HDU 1535"  AC了,但是POJ 一样的题 "POJ 1511" 就WA了. 然后强迫症犯了,不停的去测试. 题意中找到一句关键话 :Prices are positive integ

一些刷题过程中的结论

来源UVA 10313 整数i拆分成不超过j个整数的拆分方案数,是和整数i拆成若干个值不超过j的整数的拆分方案数是相同的 原理 Ferrers图像 详:http://blog.csdn.net/shiqi_614/article/details/7001949 关于C++引用带的的不易发现的错误.来自于一个4维DP.UVA 10913 例如int&res=dp[i][j][p][q].如果在这个记忆化搜索子过程中需要更新i,j,p,q;比如在当前递归中p++,那么此时的res是dp[i][j][

南阳理工 题目9:posters(离散化+线段树)

posters 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally deci

滑雪(简单dp)

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 81099   Accepted: 30239 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18

[POJ3662] Telephone Lines

题意:n个点,m条边,有k次机会免费走过一条边,最小化1-n的最大边权 题解:spfa+二分 这题好像克我......,一开始写了个二分+spfa在洛谷上A了,poj上莫名wa掉 然后写另一种方法,读入读成点数了,一直没发现,wa了一万年...... 二分最大边权 check把大于mid的边赋为1,小于等于mid的赋为0,spfa即可 #include<iostream> #include<cstdio> #include<cstdlib> #include<cs