2 条题解

  • 0
    @ 2025-10-8 16:48:37

    【参考程序】

    #include<bits/stdc++.h>
    using namespace std;
    int a[1100],f1[1100],f2[1100];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            f1[i]=1;
            for(int j=1;j<=i-1;j++)
            {
                if(a[i]>a[j])f1[i]=max(f1[i],f1[j]+1);
            }
        }
        for(int i=n;i>=1;i--)
        {
            f2[i]=1;
            for(int j=i+1;j<=n;j++)
            {
                if(a[i]>a[j])f2[i]=max(f2[i],f2[j]+1);
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            ans=max(ans,f1[i]+f2[i]-1);
        }
        printf("%d",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:48:30
      【参考程序】
      #include<bits/stdc++.h>
      using namespace std;
      int a[1100],f1[1100],f2[1100];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
          for(int i=1;i<=n;i++)
          {
              f1[i]=1;
              for(int j=1;j<=i-1;j++)
              {
                  if(a[i]>a[j])f1[i]=max(f1[i],f1[j]+1);
              }
          }
          for(int i=n;i>=1;i--)
          {
              f2[i]=1;
              for(int j=i+1;j<=n;j++)
              {
                  if(a[i]>a[j])f2[i]=max(f2[i],f2[j]+1);
              }
          }
          int ans=0;
          for(int i=1;i<=n;i++)
          {
              ans=max(ans,f1[i]+f2[i]-1);
          }
          printf("%d",ans);
          return 0;
      }
      
      • 1

      *【动态规划:区间一维一边推】合唱队形[NOIP提高组2004 输出修改版]

      信息

      ID
      125
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      190
      已通过
      78
      上传者