HDU4546 比賽難度

2022-07-13 01:15:08 字數 760 閱讀 4929

設定優先順序佇列

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之前。現在請你程式設計序...