UVA 331 交換的方案數

2022-07-29 04:57:09 字數 1008 閱讀 7832

題意:交換乙個陣列的相鄰兩個元素可以達到對陣列排序的功能,類似於氣泡排序,但交換的方案可能不止一種。比如說陣列a為3,2,1,要想排為1,2,3,可以先交換位置1和2的元素(陣列變為2,3,1),然後交換位置2和3的元素(變為2,1,3),最後交換位置1和2的(變為1,2,3),此為方案一,具體可以用1,2,1(數字即每次交換的第乙個數的位置)來描述。當然還可以先交換位置2和3(312),然後交換位置1和2(132)最後交換位置2和3(123),如上的描述方法便是2,1,2,此為方案二。當然這樣的方案是無窮多的,比如1,1,2,1,2同樣可以實現排序,但這種情況下前兩次交換是在做無用功,不是移動次數最小的方案。此題要求出移動次數最少的方案有多少個,如例子中的情況就只有2種方案。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include

11 #include 12 #include 13

using

namespace

std;

14 typedef long

long

ll;15

const

int no = 10000 + 10;16

inta[no];

17int

n, ans;

1819 inline bool

judge()

2026

27int swap( int i, int

j )28

3334

void

dfs()

3541

for( int i = 1; i < n; ++i )

42if( a[i] > a[i+1

] )4348}

4950

intmain()

5162

return0;

63 }

view code

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

題意 只能交換相鄰的數。要把乙個陣列這樣交換以形成公升序。問最少交換次數的不同交換順序有多少種。思路 還是沒想到,看到別人題解中一句話,茅塞頓開 每次從頭選兩個需要交換的位置進行交換。只有降序才需要交換,而且可以看到每次降序的調換都是有意義的。這樣每次從頭找乙個需要交換的位置,就是不同的方案。當某次...

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

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

SData 優雅的資料交換方案

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