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; }