poj 2442
給出m行n列,每行選乙個數組成乙個和,有nm【超記憶體】一開始想的思路是以乙個和作為元素用優先佇列,感覺思路還是比較巧妙,有點類似於dijkstra。先把每一行排序,每行的第乙個元素組成的和一定是最小的,通過改變最小的和中某個數(將它右移一位)可以得到n個新的數,將這些數加入優先佇列,每次選擇優先佇列裡最小的和來進行上述的操作。這樣的乙個問題是會爆記憶體,因為每取出乙個和,又會加入n個進去,所以會需要n*n的空間。個結果,問前n小的和是哪些.
限制優先佇列的個數還是應該還是可以過的。
【改後思路】看部落格後發現和別人的思路不一樣,沒有用結構體,大體思路是這樣的:把前k行每行乙個數組成的前n小的和儲存下來,在向前k+1遞推.
這裡用到了stl中的堆
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int inf=999999999;
int t;
int m,n;
int a[105][2005];
int sum[2005];
bool cmp(int a,int b)
make_heap(&temp[1],&temp[n+1],cmp);
sort(sum+1,sum+1+n);
for(int j=2;j<=n;j++)
else
break;}}
for(int j=1;j<=n;j++)sum[j]=temp[j];
}}int main()
sort(a[i]+1,a[i]+n+1);
}work();
sort(sum+1,sum+n+1);
for(int i=1;icout
<" ";
cout
12 3
3 2 1
2 2 3
*/
POJ 2442 Sequence 優先佇列)
題目鏈結 想了想 真沒思路。然後搜一下題解,這個題解講的很好。此問題是k路歸併的加強版,k路歸併好像聽說過。對stl裡的優先佇列,不熟啊。直接看的別人的 學習結構體的優先佇列,還有開乙個標記陣列去記錄。這樣還錯了好幾次。分析還是去看那個題解把。1 include 2 include 3 includ...
poj 2442 Sequence(優先佇列)
題目 題意 給你n m的矩陣,然後每行取乙個元素,組成乙個包含n個元素的序列,一共有n m種序列,讓你求出序列和最小的前n個序列的序列和。又是乙個機智的題 1 include 2 include3 include4 include5 include6 include7 include8 includ...
POJ 2442 Sequence堆 優先佇列
題目描述 給定m個序列,每個序列包含n個非負整數。現在我們可以從每個序列中選擇乙個數字以形成乙個具有m個整數的序列。顯然,我們可以得到n m種這種序列。然後,我們可以計算每個序列中的數字總和,並獲得n m個值。我們需要的是最小的n個和。你可以幫我們嗎?題目大意 給定m個長度為n的序列,從每個序列中任...