[BZOJ1046] [HAOI2007] 상승 서열(dp+욕심)

제목 설명


전송문
제목 대의: 주어진 S={a1,a2,a3,...,an}에 대해 P={x1,x2,x3,...,xm}가 있으면 만족(x1

문제풀이


아래 첨자 사전의 순서가 가장 작다는 것을 주의하십시오.f(i)는 i로 끝나는 최장 상승자 서열의 길이를 나타내고 O(n2)는 f를 앞뒤로 쓸어버리며 욕심을 낸다.현재 점의 f(i)>=L이면 ai를 직접 출력하고 L-1을 출력합니다

코드

#include
#include
#include
#include
#include
using namespace std;
#define N 10005

int n,m,Max,L;
int a[N],f[N],d[N];

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;++i) scanf("%d",&a[i]);
    f[n]=1;
    for (int i=n-1;i>=1;--i)
    {
        for (int j=i+1;j<=n;++j)
            if (a[j]>a[i]&&f[j]>f[i])
                f[i]=f[j];
        ++f[i];Max=max(Max,f[i]);
    }
    scanf("%d",&m);
    while (m--)
    {
        scanf("%d",&L);
        if (L>Max) puts("Impossible");
        else
        {
            int last=0;
            for (int i=1;i<=n;++i)
                if (f[i]>=L&&a[i]>a[last])
                {
                    --L;last=i;
                    if (!L) {printf("%d
"
,a[i]);break;} else printf("%d ",a[i]); } } } }

총결산


진지하게 문제를 읽다

좋은 웹페이지 즐겨찾기