• 1836Alignment


    又是一道没有通过的题目

    例子都对了,就是出错啊

    我的代码坑爹的没有通过,其中列举了我的两种方法,第二种做到我蛋碎,混乱啊

    #include "iostream"
    using namespace std;
    int main(){
      int n,i=0,c,k,j,flag,mid,max=0,l;
      float num[1100],d[1100];
      cin>>n;
      while(n--)cin>>num[i++];
      for(l=0;l<i;l++){
       cout<<"l "<<l<<endl;
       d[0]=num[0];
       c=0;
       cout<<"up"<<endl;
       for(j=1;j<l;j++){
         for(k=c;k>=0;k--)
          if(d[k]<=num[j])break;
         d[k+1]=num[j];
         if(k==c)c++;
         for(k=0;k<=c;k++)cout<<d[k]<<' ';cout<<endl;
       }
       if(l)c++;
       d[c]=num[l];
       mid=c;
       cout<<c<<" d[c] "<<d[c]<<endl;
       cout<<"down"<<endl;
       for(j=l+1;j<i;j++){
         for(k=c;k>=mid;k--)
          if(d[k]>=num[j])break;
         d[k+1]=num[j];
         if(k==c)c++;
         for(k=0;k<=c;k++)cout<<d[k]<<' ';
        cout<<endl;
       }
       cout<<endl;
       if(max<c)max=c;
      }
      cout<<i-c-2<<endl;
     // cout<<endl;
     }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    /*#include "iostream"
    using namespace std;
    int main(){
      int n,i=0,c,k,j,flag,mid,max=0,l;
      float num[1100],d[1100];
      cin>>n;
      while(n--)cin>>num[i++];
      for(l=0;l<i;l++){
       //cout<<"l "<<l<<endl;
    
       d[0]=num[0];
       c=1;
       flag=0;
       if(l==0){mid=0;flag=1;}
       for(j=1;j<i;j++){
        if(j<l){
          for(k=c-1;k>=0;k--)
          if(d[k]<=num[j])break;
        }
        else {
             if(!flag){mid=c;flag=1;d[c]=num[j];c++;continue;}
             for(k=c-1;k>=mid;k--)
             if(d[k]>=num[j])break;
        }
        d[k+1]=num[j];
        if(k==c-1)c++;
        //for(k=0;k<c;k++)cout<<d[k]<<' ';
        //cout<<endl;
      }
     // cout<<endl;
      if(max<c)max=c;
     }
    
      cout<<i-max<<endl;
    }
    */

    网上的答案

    #include<iostream>
    //#include<fstream>
    using namespace std;
    
    int max(int a,int b)
    {
    return a>b?a:b;
    }
    
    double height[1000];
    int a[1000],b[1000];
    int main()
    {
    // ifstream cin ("1.txt");
    int i, j, n, ans;
    while(cin>>n){
    for (i=0;i<n;i++) cin>>height[i];
    a[0]=1;
    for(i=1;i<n;i++)
    {
    a[i]=1;
    for (j=i-1;j>=0;j--)
      if (height[i]>height[j]) a[i]=max(a[i],a[j]+1);//a[i]表示正向第1个到第i个上升子段最大长度
    }
    b[n-1]=1;
    for(i=n-2;i>=0;i--)
    {
    b[i] = 1;
    for (j=i+1;j<n;j++)
      if (height[i]>height[j]) b[i]=max(b[i],b[j]+1);//b[i]表示反向第n-1到第i个上升子段最大长度
    }
    ans = 0;
    for(i=0;i<n;i++)
    for (j=i+1;j<n;j++)
    ans = max(ans, a[i] + b[j]);
    cout<<n - ans<<endl;
    }
    return 0;
    }
  • 相关阅读:
    日常练习-利用python的random模块模拟身份证号码
    学习笔记-redis
    学习笔记-AJAX&JSON
    学习笔记-JQuery
    学习笔记-Filter&Listener
    学习笔记-EL&JSTL
    学习笔记-Cookie&Session
    学习笔记-Response
    学习笔记-XML
    JToken中并没有Value这个属性,但在运行时可以看到,用dyna可以取到这个属性值
  • 原文地址:https://www.cnblogs.com/dowson/p/3255970.html
Copyright © 2020-2023  润新知