51nod 1241:特殊的排序

Posted barriery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1241:特殊的排序相关的知识,希望对你有一定的参考价值。

51nod 1241:特殊的排序

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1241

题目大意:给出$n$个数($1 \leqslant a_i \leqslant n$),现在要对这个数组进行排序,在排序时只能将元素放在数组的头部或尾部,问至少需要移动多少个数字,才能完成整个排序过程?

DP

显然最少操作数等于$n-|$最长连续子序列$|$.

故定义状态:$dp[i]$表示以$i$结尾的连续子序列长度.

转移方程:$dp[i]=dp[i-1]+1$.

代码如下:

 1 #include <iostream>
 2 #define N 50005
 3 using namespace std;
 4 int n,t,dp[N],ans;
 5 int main(void){
 6     std::ios::sync_with_stdio(false);
 7     cin>>n;
 8     for(int i=0;i<n;++i){
 9         cin>>t;
10         dp[t]=dp[t-1]+1;
11         ans=max(ans,dp[t]);
12     }
13     cout<<n-ans;
14 }

 

以上是关于51nod 1241:特殊的排序的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1241 特殊的排序

51nod 1241 特殊的排序

51nod 1241 特殊的排序(动态规划)

51nod1241(连续上升子序列)

1241 特殊的排序

51 nod 1097 拼成最小的数 思路:字符串排序