最優合併問題
time limit: 1000 ms memory limit: 65536 kib
problem description
給定k 個排好序的序列s1 , s2,……, sk , 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n的序列需要m + n -1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。
為了進行比較,還需要確定合併這個序列的最差合併順序,使所需的總比較次數最多。
對於給定的k個待合併序列,計算最多比較次數和最少比較次數合併方案。
input
輸入資料的第一行有1 個正整數k(k≤1000),表示有k個待合併序列。接下來的1 行中,有k個正整數,表示k個待合併序列的長度。
output
輸出兩個整數,中間用空格隔開,表示計算出的最多比較次數和最少比較次數。
sample input
45 12 11 2
sample output
78 52
hint
source
#include using namespace std;
//找最大的合併次數,即每次合併最大的兩個序列
int findmax(int a, int k)
return sum;
}//找最小的合併次數,即每次合併最小的兩個序列
int findmin(int a, int k)
return sum;
}int main()
最優合併問題 貪心演算法
給定k個排好序的序列s 1s 1 s1 s 2s 2 s2 s ks k sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n的序列需要m n 1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需...
最優合併問題 SDUT OJ 貪心演算法
給定k 個排好序的序列s1 s2,sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n的序列需要m n 1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需要確定合併這個序列的最差合併順序,使所需...
貪心演算法 最優裝載問題
1 資料結構定義 double w n 一維陣列儲存古董的重量 2 按重量排序 sort w,w n 按古董重量公升序排序 3 按照貪心策略找最優解 首先用變數 ans 記錄已經裝載的古董個數,tmp 代表裝載到船上的古董的重量,兩個變 量都初始化為 0。然後按照重量從小到大排序,依次檢查每個古董,...