UVa 331 交換的方案數 (回溯法,啟發)

2021-06-28 22:37:52 字數 480 閱讀 7901

題意:只能交換相鄰的數。要把乙個陣列這樣交換以形成公升序。問最少交換次數的不同交換順序有多少種。

思路:還是沒想到,看到別人題解中一句話,茅塞頓開:每次從頭選兩個需要交換的位置進行交換。只有降序才需要交換,而且可以看到每次降序的調換都是有意義的。這樣每次從頭找乙個需要交換的位置,就是不同的方案。當某次從頭掃瞄到尾沒有需要交換的位置時,則已經排好序,就是交換次數,用乙個flag變數標誌。

0.022s,還好,就沒有剪枝優化。這題還是可以剪枝的。

這題對回溯法的應用和思路很有啟發意義~

code:

#includevoid dfs(int cnt,int n);

void swap(int *a,int i,int j);

int a[6];

int bestcnt;

int num;

int main()

} if(flag==0)

{ if(cnt && cnt

UVA 331 交換的方案數

題意 交換乙個陣列的相鄰兩個元素可以達到對陣列排序的功能,類似於氣泡排序,但交換的方案可能不止一種。比如說陣列a為3,2,1,要想排為1,2,3,可以先交換位置1和2的元素 陣列變為2,3,1 然後交換位置2和3的元素 變為2,1,3 最後交換位置1和2的 變為1,2,3 此為方案一,具體可以用1,...

UVA331求排序過程交換次數最少的種類數

這題估計是d了一天的bug,頭有點暈了,第一發看到過的人挺多的,以為有規律,自以為是的按照規律交了一發,結果wa掉,其實就是模擬氣泡排序遞迴而已 include include include include include include include include include inclu...

SData 優雅的資料交換方案

sdata的 是 資料交換方案可以分為兩類 有綱要 schema 的和無綱要的。有綱要的資料交換方案有google的protocol buffers,microsoft的bond以及sdata,綱要編譯器在編譯時刻把綱要與程式語言進行對映,也就是通過綱要生成程式語言 此類方案是靜態型別化的。無綱要的...