時間限制: 1 sec 記憶體限制: 128 mb
有一列數,要對其進行排序(公升序)。排序只能通過交換來實現。每次交換,可以選擇這列數中的任意兩個,交換他們的位置,並且交換的代價為這兩個數的和。排序的總代價是排序過程中所有交換代價之和。現要求計算,對於任意給出的一列數,要將其排成公升序所需的最小代價。
輸入包含多組資料。每組資料有兩行組成。第一行乙個數n,表示這列數共有n個數組成。第二行n個互不相同的整數(都是小於1000的正整數),表示這列數。輸入檔案以n=0結尾。
對於每組輸入資料,輸出組號和排序所需的最小代價。
33 2 1
48 1 2 4
51 8 9 7 6
68 4 5 3 2 7
0
case 1: 4case 2: 17
case 3: 41
case 4: 34
首先要明白最小交換次數的演算法,大致就是n - n被分解成單迴圈的個數具體參照這個部落格
然後這題就離散化一下,找出每個單迴圈,比較計算最小值就行了
#includeusingview codenamespace
std;
int n,team3[100000
];int team[100000
];int
sum,min,num;
int check[100000]= ;
void f(int
x)int
main()
printf(
"case %d: %d\n\n
",++tot,ans);
}return0;
}
G 數列有序
g 數列有序 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status practice hdu 2019 description 有n n 100 個整數,已經按照從小到大順序排列好,現在另外給乙個...
sdut 數列有序
problem description 有n n 100 個整數,已經按照從小到大順序排列好,現在另外給乙個整數m,請將該數插入到序列中,並使新的序列仍然有序。input 輸入資料報含多個測試例項,每組資料由兩行組成,第一行是n和m,第二行是已經有序的n個數的數列。n和m同時為0表示輸入資料的結束,...
G 數列有序
有n n 100 個整數,已經按照從小到大順序排列好,現在另外給乙個整數x,請將該數插入到序列中,並使新的序列仍然有序。輸入資料報含多個測試例項,每組資料由兩行組成,第一行是n和m,第二行是已經有序的n個數的數列。n和m同時為0標示輸入資料的結束,本行不做處理。對於每個測試例項,輸出插入新的元素後的...