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

    Time Limit: 10 Sec Memory Limit: 162 MB
    Submit: 5719 Solved: 2010
    [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

    题解

    首先倒过来求出最长下降子序列,然后判断是否能取到,之后开始枚举并更新。
    

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    const int MAXN = 10005;
    
    int n,m,a[MAXN],dp[MAXN];
    int Max;
    
    int main() {
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]),dp[i]=1;
        for(int i=n-1;i;i--){
            Max=1;
            for(int j=i+1;j<=n;j++)
                if(a[j]>a[i] && dp[j]+1>Max)
                    Max=dp[j]+1;
            dp[i]=Max;  
        }
        Max=0;
        for(int i=1;i<=n;i++)
            Max=max(dp[i],Max);
    //  cout<<Max<<endl;
        scanf("%d",&m);
        for(int i=1; i<=m; i++){
            int x;
            scanf("%d",&x);
            if(x>Max) cout<<"Impossible"<<endl;
            else{
                int k=0;
                for(int j=1;j<=n;j++)
                    if(dp[j]>=x && a[j]>a[k]){
                        printf("%d ",a[j]);
                        k=j;x--;
                        if(x==0) break;
                    }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    V部落,V人事
    jq 正方体旋转
    jq 实现旋转木马
    jquery 获取元素(父节点,子节点,兄弟节点)
    Vue.js面试题整理
    Java面试必备技能
    在前后端分离的SpringBoot项目中集成Shiro权限框架
    正则表达式大全
    Docker容器日志查看与清理
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677068.html
Copyright © 2011-2022 走看看