51Nod 1241 特殊的排序

2021-07-23 21:22:09 字數 716 閱讀 7329

乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?

例如:

2 5 3 4 1 將1移到頭部 =>

1 2 5 3 4 將5移到尾部 =>

1 2 3 4 5 這樣就排好了,移動了2個元素。

給出乙個1-n的排列,輸出完成排序所需的最少移動次數。

看到這題就一臉懵逼,但是直覺告訴我是道貪心題。

如果要保證移走之後是有序的,那麼找乙個最長的有序序列不就好了。

所以貪心策略就是這樣,找一條最長的有序序列,然後用n-最長有序序列的個數。

因為把除了最長有序序列的值向兩邊移動之後可以滿足有序。

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

const

int maxn=50007;

int i,j,k,l,t,n,m,ans;

int a[maxn],f[maxn],c[maxn];

int main()

printf("%d\n",n-ans);

}

51Nod 1241 特殊的排序

題目傳送門 分析 之前想的是求lis,後面發現這組資料會出問題 3 1 2 4 5 6。其實這裡的lis還應當滿足前後兩個元素的值相差為1。比如上面的最長子串行為 3 4 5 6,而不是1 2 4 5 6。即只需移動1 2即可。即如果n個數最長連續上公升子串行 這裡的連續指數值上連續,即前後相差1 ...

51nod 1241 特殊的排序

1241 特殊的排序 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5...

51nod 1241 特殊的排序

原題鏈結 1241 特殊的排序 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 ...