1 条题解

  • 0
    @ 2025-10-8 16:53:06
    #include<bits/stdc++.h>
    using namespace std;
    int a[1100],fup[1100],fdn[1100];
    int main()
    {
        int n=1;
        while(scanf("%d",&a[n])!=EOF)n++;
        n--;
        fup[0]=0;
        for(int i=1;i<=n;i++)
        {
            fup[i]=1;
            for(int j=i-1;j>=1;j--)
                if(a[i]>a[j])
                    fup[i]=max(fup[i],fup[j]+1);
        }
        fdn[n+1]=0;
        for(int i=n;i>=1;i--)
        {
             
            fdn[i]=1;
            for(int j=i+1;j<=n;j++)
                if(a[i]>=a[j])
                    fdn[i]=max(fdn[i],fdn[j]+1);
        }
        int s1=0,s2=0;for(int i=1;i<=n;i++) s1=max(s1,fup[i]),s2=max(s2,fdn[i]);
        printf("%d\n%d\n",s2,s1);
        return 0;
    }
    
    
    #include<bits/stdc++.h>
    using namespace std;
    int a[1100],f1[1100],f2[1100];
    int main()
    {
        int n=0,x;
    	while(scanf("%d",&x)!=EOF)a[++n]=x;
        f1[0]=0;
        for(int i=1;i<=n;i++)
        {
            f1[i]=1;
            for(int j=i-1;j>=1;j--)
                if(a[i]>a[j])
                    f1[i]=max(f1[i],f1[j]+1);
        }
        f2[0]=0;
        for(int i=1;i<=n;i++)
        {
            f2[i]=1;
            for(int j=i-1;j>=1;j--)
                if(a[i]<=a[j])
                    f2[i]=max(f2[i],f2[j]+1);
        }
        int s1=0,s2=0;for(int i=1;i<=n;i++) s1=max(s1,f1[i]),s2=max(s2,f2[i]);
        printf("%d\n%d\n",s2,s1);
        return 0;
    }
    
    • 1

    *【动态规划:区间一维一边推】拦截导弹[NOIP普及组1999]

    信息

    ID
    639
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    147
    已通过
    45
    上传者