loj3366 嘉年華獎券

2022-06-07 10:51:08 字數 1113 閱讀 9181

聯絡絕對值的幾何意義/分類討論,不難發現若$n$張獎券上的數從小到大依次為$a_$,則收益為$\sum_^}a_}-a_$

假設確定了這$nk$個數字,設這從小到大依次為$a_$,容易發現答案最大不會超過$\sum_^}a_}-a_$;同時,如果存在$x>y$滿足$a_$為負號且$a_$為正號,就交換$(a_,a_)$,最終一定可以取到最大值

再考慮如何確定這$nk$個數字,先取出每乙個組中最小的數,符號都為負,然後貪心$\frac$次選擇一組將符號為負且最大(原值)的數替換為未被選擇的最大的數,使得收益(即兩數之和)最大,並用set維護即可

還有構造方案的問題,由於前者已經證明了必然存在方案,那麼隨便構造一輪後,這個子問題類似的依然可以證明存在方案,因此每一輪可以任意構造,先優先考慮全是正號/負號的組,其餘組再任意選擇即可

1 #include "

tickets.h

"2 #include3

using

namespace

std;

4#define n 1505

5 vectorint> >a;

6 priority_queueint,int> >q;

7int

n,m,mn[n],mx[n],p[n];

8long

long find_maximum(int k,vectorint> >c)

17for(int i=0;i)

21for(int i=0;i2;i++)

28long

long ans=0;29

for(int i=0;i)

33for(int i=0;i)

37for(int i=0;i)

46 y=(x+y)/2;47

for(int j=0;j)

48if ((mn[j])&&(mx[j]))

52for(int j=0;j)

53if (p[j])a[j][--mn[j]]=i;

54else a[j][m-mx[j]--]=i;55}

56allocate_tickets(a);

57return

ans;

58 }

view code

LOJ 皇宮看守

題目鏈結 點加權的最小覆蓋 題目說的很清楚,用最少的點覆蓋所有的點。題目給出的是個樹,所以可以用動態規劃來解決。給出如下定義 f i,0 表示i點不放,i可以被父親節點觀察到 f i,1 表示i點不放,i可以被兒子節點觀察到 f i,2 表示i點放,在i處設定警衛 轉移如下 1 由f i,0 定義可...

3366 模板 最小生成樹(Prim)

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...

loj冪方分解

問題描述 任何乙個正整數都可以用2的冪次方表示。例如 137 27 23 20 同時約定方次用括號來表示,即ab 可表示為a b 由此可知,137可表示為 2 7 2 3 2 0 進一步 7 22 2 20 21用2表示 3 2 20 所以最後137可表示為 2 2 2 2 2 0 2 2 2 0 ...