1 条题解

  • 0
    @ 2024-12-22 11:04:03

    C :

    #include<stdio.h>
    int a[100000];
    int dp1[100000];
    int dp2[100000];
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
        int s=1;
        char z;
        dp1[1]=dp2[1]=1;
        while(~scanf("%d",&a[s]))
        {
            s++;
            z=getchar();
            if(z=='\n')break;
            dp1[s]=dp2[s]=1;
        }
        int max1=0,max2=0;
        for(int i=1;i<s;i++)
            for(int j=i-1;j>=1;j--)
            {
                 if(a[i]<=a[j])dp1[i]=max(dp1[i],dp1[j]+1);
                 else
                 dp2[i]=max(dp2[i],dp2[j]+1);
                  if(dp1[i]>max1)max1=dp1[i];
                  if(dp2[i]>max2)max2=dp2[i];
            }
        printf("%d\n%d\n",max1,max2);
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #include<cmath>
    #include<vector>
    #include<string>
    #include<cstdio>
    using namespace std;
    
    int h[100000], a[100000];
    
    int main()
    {
        //freopen("E.txt", "r", stdin);
        int i = 0, tmp;
        while(scanf("%d", &tmp) != EOF)
        {
            h[i] = tmp;
            a[i++] = tmp;
        }
        int ans = 0, res = 0;
        vector<int> v;
        for(int j = i - 1; j >= 0; --j)
        {
            if(v.empty()) v.push_back(a[j]);
            else
            {
                if(a[j] >= v[v.size()-1]) v.push_back(a[j]);
                else
                {
                    int p = upper_bound(v.begin(), v.end(), a[j]) - v.begin();
                    v[p] = a[j];
                }
            }
        }
    //    for(int i = 0; i < v.size(); ++i) cout<<v[i]<<" ";cout<<endl;
        ans = v.size();
        for(int j = i - 1; j >= 0; --j)
        {
            while(h[j] == -1) --j;
            if(j == -1) break;
            res++;
            int t = h[j]; h[j] = -1;
            for(int k = j - 1; k >= 0; --k)
            {
                if(h[k] >= t) t = h[k], h[k] = -1;
            }
        }
        cout<<ans<<endl<<res<<endl;
        return 0;
    }
    
    
    • 1

    信息

    ID
    283
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者