zoukankan      html  css  js  c++  java
  • 1046: [HAOI2007]上升序列

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 5822  Solved: 2071
    [Submit][Status][Discuss]

    Description

      对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax
    2 < … < axm)。那么就称P为S的一个上升序列。如果有多个P满足条件,那么我们想求字典序最小的那个。任务给
    出S序列,给出若干询问。对于第i个询问,求出长度为Li的上升序列,如有多个,求出字典序最小的那个(即首先
    x1最小,如果不唯一,再看x2最小……),如果不存在长度为Li的上升序列,则打印Impossible.

    Input

      第一行一个N,表示序列一共有N个元素第二行N个数,为a1,a2,…,an 第三行一个M,表示询问次数。下面接M
    行每行一个数L,表示要询问长度为L的上升序列。N<=10000,M<=1000

    Output

      对于每个询问,如果对应的序列存在,则输出,否则打印Impossible.

    Sample Input

    6
    3 4 1 2 3 6
    3
    6
    4
    5

    Sample Output

    Impossible
    1 2 3 6
    Impossible
     
    首先因为字典序要最小,所以要在前面的数字开头,但是按照最长上升子序列做法只能是后面的数字结尾,如果倒过来做最长下降子序列不就变成了前面数字开头了吗?
    枚举每一个数字作为开头时,最长子序列长度,这里数据量比较小,可以用n2做法
    然后首先判断提问,是否存在长度大于等于L的序列,记录最长序列的长度判断一下
     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int MAXN=100000;
     6 
     7 int n,m,len;
     8 int a[MAXN],f[MAXN];
     9 
    10 void LIS()
    11 {
    12     for(int i=n;i>=1;i--)
    13     {
    14         for(int j=n;j>i;j--)
    15             if(a[j]>a[i]) f[i]=max(f[i],f[j]);
    16         f[i]++;
    17         len=max(f[i],len);
    18     }
    19 }
    20 
    21 void solve(int x)
    22 {
    23     int last=0;
    24     for(int i=1;i<=n;i++)
    25         if(f[i]>=x&&a[i]>last&&x>0)
    26         {
    27             printf("%d ",a[i]);
    28             last=a[i];
    29             x--;
    30         }
    31     printf("
    ");
    32 }
    33 
    34 int main()
    35 {
    36     scanf("%d",&n);
    37     for(int i=1;i<=n;i++)
    38         scanf("%d",&a[i]);
    39     LIS();
    40     scanf("%d",&m);
    41     for(int i=1;i<=m;i++)
    42     {
    43         int x;
    44         scanf("%d",&x);
    45         if(x<=len) solve(x);
    46         else printf("Impossible
    ");
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    HelloWorld入门程序
    再写博客
    iOS--小结系列一
    iOS--ARC
    ios--block
    iOS--protocol
    iOS--内存管理
    指针基本概念
    ZooKeeper系列之十:ZooKeeper的一致性保证及Leader选举
    ZooKeeper系列之九:ZooKeeper API简介及编程
  • 原文地址:https://www.cnblogs.com/InWILL/p/9410449.html
Copyright © 2011-2022 走看看