51Nod 1241 特殊的排序

2021-06-29 12:52:06 字數 541 閱讀 2073

題目傳送門

分析:之前想的是求lis,後面發現這組資料會出問題:3 1 2 4 5 6。

其實這裡的lis還應當滿足前後兩個元素的值相差為1。比如上面的最長子串行為:3 4 5 6,而不是1 2 4 5 6。即只需移動1、2即可。

即如果n個數最長連續上公升子串行(這裡的連續指數值上連續,即前後相差1)長度為k,則最少移動次數為n-k

簡略證明:

首先需要證明:最少移動次數和移動數的個數是相等的,即每個數最多只移動一次。因為最終每個數的位置是確定的,若乙個數需要移動,只需一次移動到該位置即可。

假設存在更優的移動方案,移動次數為m,即移動m(mk)個數是不需要移動的,這樣n-m個數構成了更長的連續上公升子串行。矛盾!

#include#include#includeusing namespace std;

int a[50005],b[50005];

int main()

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

}return 0;

}

51nod 1241 特殊的排序

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

51Nod 1241 特殊的排序

乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5 3 4 將5移到尾部 1 2 3 4 5 這樣就排好了,移動了2個元素。給出乙個1 n的排列,輸出完成排...

51nod 1241 特殊的排序

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