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