設定優先順序佇列
sum:當前和
nex:加入下個元素的和
ith:將要考慮的下個元素
讀入資料後排序,初始化佇列第乙個元素(0,a[0],0)
每次出隊乙個元素,入隊(sum,sum+a[ith],ith+1),(nex,nex+a[ith],ith+1),即是否加上a[ith]都考慮進去了。
這樣每次新加入的元素都是下乙個最小的(nex),進行m次就得到了第m小。
#include#include#include
#include
#include
using
namespace
std;
intn, m;
const
int maxn = 10011
;struct
node
node(
int sum_, int nex_, int ith_)
bool
operator
<(const node &b)const
};int
a[maxn];
int cal(int
m)
for(m = 0; !q.empty(); m ++) a[m] =q.top().sum, q.pop();
sort(a, a +m);
return a[m - 1];}
intmain()
return0;
}
優先佇列 HDU4546比賽難度
problem description 最近,小明出了一些acm程式設計題,決定在hdoj舉行一場公開賽。假設題目的數量一共是n道,這些題目的難度被評級為乙個不超過1000的非負整數,並且一場比賽至少需要乙個題,而這場比賽的難度,就是所有題目的難度之和,同時,我們認為一場比賽與本場題目的順序無關,而...
HDU4546比賽難度 優先堆 思維 好題
題目鏈結 hdu4546 題目大意 給n長度的數字序列,從中取出k個元素 0解題思路 第一次做這樣組合的題,第一直覺會想用爆搜窮舉出所有組合,然後扔進multiset中維護這些值,搜尋的複雜度是指數級,記憶體也超限。發現找到第m個小的可以直接用優先佇列來模擬,因為m 10000,所以可以模擬到第m大...
HDU1285 確定比賽名次
problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序...