多元Huffman編碼問題

2021-09-29 21:44:26 字數 1066 閱讀 8345

time limit: 1000 ms memory limit: 65536 kib

在乙個操場的四周擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次至少選2 堆最多選k堆石子合併成新的一堆,合併的費用為新的一堆的石子數。試設計乙個演算法,計算出將n堆石子合併成一堆的最大總費用和最小總費用。

對於給定n堆石子,計算合併成一堆的最大總費用和最小總費用。

輸入資料的第1 行有2 個正整數n和k(n≤100000,k≤10000),表示有n堆石子,每次至少選2 堆最多選k堆石子合併。第2 行有n個數(每個數均不超過 100),分別表示每堆石子的個數。

將計算出的最大總費用和最小總費用輸出,兩個整數之間用空格分開。

7 345 13 12 16 9 5 22

593 199

#include

using

namespace std;

priority_queue<

int>q1;

priority_queue<

int,vector<

int>

,greater<

int>

>q2;

intmain()

while

(q2.

size()

%(k-1)

!=1) q2.

push(0

);//補零

long

long sum1=0;

//注意數可能過大,定義為長整型

int sum;

while

(q2.

size()

>1)

//求最小值,要使最小則使合併此數盡可能少,

sum1+

=sum;

q2.push

(sum);}

long

long sum2=0;

//求最大值

while

(q1.

size()

>1)

//要使值最大則使合併此數盡可能多,

cout<" "<}

多元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堆石子合併成新的一堆,合併的費用為新的一堆的石子數。...