在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個單位的食物,第...