http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=497&problem=3148
暴力k的k次方的算法當然是肯定 超時
稍動點腦子,先算出最小的(兩排中最小的相加肯定是),維護一個優先隊列,邊pop,邊push可能的最小的,然後最先出來的肯定是最小的k個
順便練習下怎麼用STL的優先隊列
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// //優先隊列析構如果花時間的話,那麼你就在一個函數裡建隊列, //每次調用結束後自動析構,只不過把值存到一個全局變量或者 //傳遞過來的數組裡 //uva 11997 優先隊列練習 //2014.4.16 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include#include #include #include #include #include using namespace std; const int MAXN = 768; int k; int a[MAXN][MAXN]; /*注意這個Elem怎麼寫的,c++我還是太弱菜了*/ struct Elem{ int s,b; Elem(int s,int b):s(s),b(b){} /*注意寫法*/ bool operator < (const Elem &t)const{ return s>t.s; } }; void Add(int j) { priority_queue q; int c[MAXN]; for(int i=0;i