小朋友學演算法(18) 交換機器的最小代價

2021-09-13 13:30:23 字數 1942 閱讀 6349

有n臺機器重量各不相等,現在要求把這些機器按照重量排序,重量從左到右依次遞增。移動機器只能做交換操作,但交換機器要花費一定的費用,費用的大小就是交換機器重量的和。例如:3 2 1,交換1 3後為遞增排序,總的交換代價為4。

給出n臺機器的重量,求將所有機器變為有序的最小代價(機器的重量均為正整數)。

輸入第1行:1個數n,表示機器及房間的數量。(2 <= n <= 50000)

第2 - n + 1行:每行1個數,表示機器的重量wi。(1 <= wi <= 10^9)

輸出最小代價

樣例1輸入

5

1 8 97

6

樣例1輸出

41
以樣例1例,先進行排序下標1

2345

排序前189

76排序後167

89我們從元素1開始看,排序後元素1的位置還是1,那麼就給1到1之間連一條邊,形成乙個自環;再到元素8,元素8排序以後到了第4個位置,而第四個位置是元素7,所以給8到7之間連一條有向邊,同理連完剩下的邊可以得到一張圖:

那麼我們可以發現兩個環,那麼我們回到題目中來,要使最後的總和最小,我們的貪心思路是什麼?

策略一:

對於每乙個環的貪心思路就是,找到這個環中最小的那個點,也就是6,然後從6開始進行交換,6和9交換,可以使9到對應的位置,花費為6+9=15,然後6和7交換,花費為6+7=13,最後等到交換完畢,自最後的答案是什麼呢?就是:

(6+9)+(6+7)+(6+8) = (6+7+8+9)+6∗2 = 30+12 = 42。

剩下乙個環不用交換,那麼當前的最小值就是42,但是這不一定是最優解。

這種策略的解可表示為ans1 = sum + min * (cnt - 1),這裡min是當前環中的最小值,cnt是min與別的元素交換的次數。

策略二:

在這個圖中找到乙個最小的值,然後用這個值跟著當前的環進行交換,在這個圖中很明顯是1,我們讓第1和第二個環中的最小值6進行交換,然後再像上面一樣,交換1和9,花費為:1+9=10,交換1和7,花費為:1+7=8等到交換完畢,最後的結果是:

(1+6)+(1+9)+(1+7)+(1+8)+(1+6) = (6+8+7+9)+1∗5+6 = 41

這種策略的解可表示為ans2 = sum + least * (cnt + 2) + min,這裡least表示所有元素的最小值,min表示當前環中的最小值。

我們的貪心策略就是在這兩個策略之間,找出乙個最小值ans = min(ans1, ans2)。

#include#include#define maxn 50010

using namespace std;

bool visited[maxn]; //記錄該位置的機器是否已經排好序

int least;//記錄最小重量

struct machine

;machine mac[maxn];

bool cmp(machine a, machine b)

long long solve(int i)

return sum + min((long long)min*(cnt-1), (long long)least*(cnt+2)+min);//兩種策略的比較

}int main()

sort(mac+1, mac+n+1, cmp);

least = mac[1].weight;

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

}cout << ans << endl;

return 0;

}

1125 交換機器的最小代價(貪心,環)

有n臺機器重量各不相等,現在要求把這些機器按照重量排序,重量從左到右依次遞增。移動機器只能做交換操作,但交換機器要花費一定的費用,費用的大小就是交換機器重量的和。例如 3 2 1,交換1 3後為遞增排序,總的交換代價為4。給出n臺機器的重量,求將所有機器變為有序的最小代價。機器的重量均為正整數 輸入...

51nod 1125 交換機器的最小代價

這道題是以前數學專題做過類似的,就是學 置換 的時候 比如 2 3 4 1,就是乙個迴圈,因為第乙個位置是2,然後去找第二個位置,是3,又找第三個位置,是4,又找第四個位置,又回到了1。而4 3 2 1,第乙個位置是4,找第4個位置,是1,找第乙個位置,又是4,所以是個迴圈,同理也是個迴圈 那我們為...

51nod1125 交換機器的最小代價

跟做過的bzoj一道置換群的題幾乎一樣,只是資料範圍大了點,那麼就用map就好了。include include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,...