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

2021-09-29 19:34:53 字數 1482 閱讀 1422

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

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

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

輸出輸出最小代價。

輸入樣例33

21輸出樣例

4所有需要交換的數可以構成一組組環

先對數進行排序

舉兩組資料:

51 3 4 5 2

id : | 1 | 2 | 3 | 4 | 5 | //陣列下標,也是數的理想位置

va: | 1 | 2 | 3 | 4 | 5 | //數值

no: | 1 | 5 | 4 | 3 | 2 | //當前所在位置now

可以發現構成一組環 2->3->4->5->2 或者 2->5->4->3->2(便於**編寫)

為了求最小代價pi,我們以2開始跑

pi=(2+5)+(2+4)+(2+3)= (3+4+6)+2 * 3=18

但還有一種情況

51 8 9 10 7

id : | 1 | 2 | 3 | 4 | 5 | //陣列下標,也是數的理想位置

va: | 1 | 7 | 8 | 9 | 10 | //數值

no: | 1 | 5 | 4 | 3 | 2 | //當前所在位置now

可以發現構成一組環 7->8->9->10->7 或者 7->10->9->8->7(便於**編寫)

為了求最小代價pi,我們先以7開始跑

pi=(7+10)+(7+9)+(7+8)=(8+9+10)+7 * 3= 48

但是還有另外一種情況 我們先將 1,7位置交換,用1代替7去跑,最後再換回來

pi=(1+10)+(1+9)+(1+8)+(1+7) * 2=(8+9+10)+1*3+(1+7)*2= 46 < 48

綜上可以發現pi=(8+9+10)+min(7 * 3 , 1 * 3+(1+7) * 2 )

#includeusing namespace std;

#define ll long long

struct node

a[50010];

bool cmp(node x,node y)

int weizhi[50010];

int main()

sort

(a+1,a+n+1,cmp)

;for

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

ans+=min

(a[i].w*sum,(a[i].w+a[1].w)*2+a[1].w*sum);}

cout<;

return 0;

}

51nod1125 交換機器的最小代價 貪心

1125 交換機器的最小代價 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有n臺機器重量各不相等,現在要求把這些機器按照重量排序,重量從左到右依次遞增。移動機器只能做交換操作,但交換機器要花費一定的費用,費用的大小就是交換機器重量的和。例如 3 2 1,交換1...

51nod1125 交換機器的最小代價(貪心)

1125 交換機器的最小代價 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有n臺機器重量各不相等,現在要求把這些機器按照重量排序,重量從左到右依次遞增。移動機器只能做交換操作,但交換機器要花費一定的費用,費用的大小就是交換機器重量的和。例如 3 2 1,交換1...

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

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