在乙個操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次至少選2 堆最多選k堆石子合併成新的一堆,合併的費用為新的一堆的石子數。試設計乙個演算法,計算出將n堆石子合併成一堆的最大總費用和最小總費用。
對於給定n堆石子,計算合併成一堆的最大總費用和最小總費用。
輸入資料的第1 行有2 個正整數n和k(n≤100000,k≤10000),表示有n堆石子,每次至少選2 堆最多選k堆石子合併。第2 行有n個數(每個數均不超過 100),分別表示每堆石子的個數。
將計算出的最大總費用和最小總費用輸出,兩個整數之間用空格分開。
input
7 3output45 13 12 16 9 5 22
593 199請注意資料範圍是否可能爆 int。
1 #include 2 #include 3 #include4 #include 5 #include 6
7#define inf 0x3f3f3f3f89
using
namespace
std;
1011 priority_queue, greater > q1;///
greater是從小到大
12 priority_queue, less >q2;///
less是從大到小
1314
intmain()
1525
while(q1.size()%(k-1) != 1)26
29 sum1 = 0;30
while(q1.size()!=1)31
38 sum1 +=sum;
39q1.push(sum);40}
41 sum2 = 0;42
while(q2.size()!=1)43
50 sum2 +=sum;
51q2.push(sum);52}
53 cout << sum2 << "
"<< sum1 <54return0;
55 }
多元Huffman編碼問題
problem description 在乙個操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次至少選2 堆最多選k堆石子合併成新的一堆,合併的費用為新的一堆的石子數。試設計乙個演算法,計算出將n堆石子合併成一堆的最大總費用和最小總費用。對於給定n堆石子,計算合併成一堆的最大總費用和最...
多元Huffman編碼問題
problem description 在乙個操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次至少選2 堆最多選k堆石子合併成新的一堆,合併的費用為新的一堆的石子數。試設計乙個演算法,計算出將n堆石子合併成一堆的最大總費用和最小總費用。對於給定n堆石子,計算合併成一堆的最大總費用和最...
多元Huffman編碼問題
time limit 1000 ms memory limit 65536 kib submit statistic problem description 在乙個操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次至少選2 堆最多選k堆石子合併成新的一堆,合併的費用為新的一堆的石子數。...