您的位置:首页 > 其它

51nod 1241:特殊的排序

2017-04-17 11:59 225 查看
[b]51nod 1241:特殊的排序[/b]

题目链接: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$.

代码如下:

#include <iostream>
#define N 50005
using namespace std;
int n,t,dp
,ans;
int main(void){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<n;++i){
cin>>t;
dp[t]=dp[t-1]+1;
ans=max(ans,dp[t]);
}
cout<<n-ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: