关注
#include<iostream>
using namespace std;
int main()
{
int n,a[10000],f[10000],f1[10000];
while(cin>>n){
for(int i=0;i<n;i++){//循环输入m[i]
cin>>a[i];
f[i]=1;}//假设f[i]表述对应的a[i]中如果以a[i]作为最长上升子序列的最后一个数字,其中元素的个数
//赋值1的原因是:任何一个数字单独作为升子序列(以下简称序列)的最后一个数字的时候,元素个数为1。
for(int i=0;i<n;i++){//此时赋值已经完成, 即a[i]={a[0],a[1]...a[n]}。
for(int j=0;j<i;j++){//随意选取一个a[i],我们需要在它前面找满足条件:
if(a[j]<a[i]){//条件即为a[j]<a[i],只有这样我们才能把a[j]保留在a[i]前面。
f[i]=max(f[j]+1,f[i]);}//假设原来我们采用的a[j]是序列的最后一个,对应一共有f[j]个元素,如果以a[i]作为序列最后一个,对应一共有f[i]个元素,由于a[j]<a[i],相当于a[j]作为序列尾元素的情况后又多了一个啊a[i]
//那这个时候对应的new(新的)f[j]应该+1,而以a[i]作为序列尾元素,总体元素个数f[i]维持不变,取它们两个的最大值就是f[i]的实际值,因为是循环,,f[i] 可能赋过很多次值 ,因此需比较两者最大值得出序列成立是元素最多的情况。
}
}
for(int i=n-1;i>=0;i--){
f1[i]=1;//反向循环同理赋值。
for(int j=n-1;j>i;j--) {
if(a[j]<a[i]){//反向循环找到a[i]右边的值满足a[j]<a[i],这样a[j]可以放在a[i]的右边,其他道理同上。
f1[i]=max(f1[j]+1,f1[i]);}
}
}
int maxx=0;//这里就是定义它是满足要求的双向上升子序列中元素的个数。
for(int i=0;i<n;i++){
maxx=max(f[i]+f1[i]-1,maxx);}//当某个a[i]作为左->右循环尾值,一共有f[i]个元素,右->左循环首值,一共有元素f1[i]个,f[1]和f1[i]中均包含a[i]这个元素,所以最终元素个数要剪掉1个。
cout << n-maxx << endl;//总元素个数-剩下元素个数=踢出去的元素个数
}
return 0;
}
//你是这个意思吧?
点赞
相关推荐
06-25 17:28
杭州电子科技大学 测试工程师 juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
昨天 17:23
武汉轻工大学 运营 点赞 评论 收藏
分享
合适才能收到offe...:我还在战斗,我已经杀疯了
查看图片

点赞 评论 收藏
分享
06-25 16:53
门头沟学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你觉得现在还能进互联网吗? #
2044次浏览 66人参与
# 如何准备秋招 #
4899次浏览 76人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
18805次浏览 167人参与
# 实习,不懂就问 #
15993次浏览 225人参与
# 如果中了500万,你会离职吗? #
86394次浏览 676人参与
# 你觉得实习能学到东西吗 #
7285次浏览 163人参与
# 哪个瞬间让你对大厂祛魅了? #
379525次浏览 2777人参与
# 面试时被问的最奇葩的问题 #
21543次浏览 124人参与
# 秋招什么时候开投比较合适? #
3065次浏览 59人参与
# 软开人,秋招你打算投哪些公司呢 #
99518次浏览 934人参与
# 来聊聊你认为的薪资天花板是哪家? #
30337次浏览 174人参与
# 每个月的工资都是怎么分配的? #
7111次浏览 134人参与
# 预测一下26届秋招形势 #
11624次浏览 124人参与
# 腾讯工作体验 #
473638次浏览 3489人参与
# 打工人的精神状态 #
51797次浏览 939人参与
# 职场情商大赛 #
131201次浏览 655人参与
# 高考出分的那一天,我__ #
9816次浏览 142人参与
# 非技术2024笔面经 #
384599次浏览 4732人参与
# 一觉醒来,秋招难度下降一万倍…… #
83532次浏览 642人参与
# 京东美团大战,你怎么看? #
92516次浏览 569人参与
# 安利/避雷我的专业 #
75436次浏览 522人参与