就是產生m個逆序對,並且其的字典序盡量小。
首先我們知道乙個長度為n的排列最多有(n-1)*n/2個逆序對,也知道乙個排列的逆序對數越多,排列字典序越大。所以如果當前m不比
當前的(n-2)*(n-1)/2(也就是減少乙個數之後的最多的逆序對數)大,就可以直接把當前的最小數放在最前面,這肯定是最優的。
反之,則考慮最小數的放置位置。肯定不能放在第一位,直接把其放在最後一位,讓接下來的數字逆序對少。
(其實我覺得還有一種更好的理解,因為肯定要盡可能讓最考前的數字越小越好,所以把不能放在「相對第乙個位置」的數字,
放在最後。讓m盡可能的減少的最多。讓「相對第乙個位置」能放上更小的數!)
可能m開到 long long
#includeusing namespace std;
long long n,m,i,j,a[50010];//開 long long
int main()
else
}for(i=1;i<=n;i++)
return 0;
}
洛谷P1338(末日的傳說)
只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...
洛谷P1338 末日的傳說
qaq本來不是多難的題,然鵝我折騰了半天。看到乙個挺不錯的想法 我們知道,對於乙個長度為n的序列而言,其最大的逆序對的個數為n n 1 2,題目是要求乙個逆序數為m的字典序最小的序列。那我們不妨從1開始考慮每乙個數的排列,這樣每次考慮的都是當前最小的數 如果把這個數放在最前面,而剩下的數的排列的逆序...
洛谷P1338 末日的傳說
只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...