貪心 失意(jzoj 2318)

2021-09-26 23:07:46 字數 1242 閱讀 6056

在x軸上給出n條線段,讓你選m條線段,使他們的相交部分盡量大

4

6 33 8

4 12

2 61 10

5 911 12

4

1 2 4

我們先從左到右選m條線段,然後用乙個小根堆來存這m條線段的結束位置,然後每遇到一條線,就判斷結束位置是否比堆中最小結束位置小,如果是那麼刪掉堆中的那條線段,然後加上當前線段,每次都要求最大答案,也要把已經過了的出堆

#include

#include

#include

#include

#include

using

namespace std;

int t,n,m,num,ans,p[

1000500];

struct rec

a[1000500];

bool

cmp(rec x,rec y)

bool

operator

<

(rec xx,rec yy)

intmain()

sort

(a+1

,a+1

+n,cmp)

; priority_queue d;

d.push()

;for

(int i=

1;i<=n;

++i)

if(a[i]

.r>h.r||num//判斷是否入堆

h=d.

top();

if(h.r-a[i]

.l>ans&&num==m)

//求最大結果

ans=h.r-a[i]

.l;}

printf

("%d\n"

,ans);if

(!ans)

num=0;

while

(!d.

empty()

) d.

pop();

for(

int i=

1;i<=n;

++i)

//再跑一遍,求序列

if(a[i]

.r>h.r||numh=d.

top();

if(h.r-a[i]

.l==ans&&num==m)

}return0;

}

jzoj4249 遊戲 貪心

0 n 0 sim n 0 n的點,從i ii移動到j jj獲得aj j i a j j i aj j i 的價值。求最大價值。考慮貪心,每次移動到往後a ia i ai 最大的點。證明 反證明 我們假設有一種情況i ij a jaj 但是之間移動到j jj比先移動到i ii更優。但是若我們先移動到...

jzoj數字遊戲 貪心 DP

description 一行數字a1,a2,a3,an,有m個回合,每個回合必須從中選擇乙個數字擦去它,接著每個回合後剩下來的每個數字ai都要遞減乙個相應的值bi。如此重複m個回合,所有你擦去的數字之和就是你所得的分數。給出n,m,a數列和b數列,求所得的最多的分數。input 輸入檔案的第一行是乙...

貪心 逃跑(jzoj 1748)

你有乙個能量值l,在接下來的n天裡,你每天有兩個選擇 1 增加l個食物 2 使l加一,你第i天要吃ai個 a i個 ai 個 食物,如果吃不到就會死掉,現在問你n天後你能活下去嗎,如果能那最多剩多少個食物?有t組資料 1 5 21 1 1 4 22乙個可行的最優方案如下 第一天製造2個單位的食物,第...