Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
112208 | 梁乃元 | 合唱队形 | C++ | 通过 | 100 | 0 MS | 244 KB | 969 | 2023-11-25 10:58:52 |
#include<iostream> #include<cstdio> using namespace std; int g[105],f[105],a[105],s[105]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; f[i]=1; g[i]=1; }//输入并赋初值 for(int i=n-1;i>=1;i--) { for(int j=i+1;j<=n;j++) { if(a[i]>a[j]&&f[i]<=f[j]+1) { f[i]=f[j]+1; } } }//从右往左,按左高右低顺序找出每一个位置右边有几个从高到低的数 (包括自己) for(int i=2;i<=n;i++) { for(int j=1;j<i;j++) { if(a[i]>a[j]&&g[i]<=g[j]+1) { g[i]=g[j]+1; } } }//从左往右,按左低右高顺序找出每一个位置左边有几个从低到高的数 (包括自己) int maxx=0; for(int i=1;i<=n;i++) { s[i]=f[i]+g[i]-1;//把每个数的左边从低到高的数和右边从高到低的数相加 //注意!!自己加了两次要-1 if(s[i]>maxx) { maxx=s[i]; } } cout<<n-maxx;//是求出列的人数 }