貪心 逃跑(jzoj 1748)

2021-10-02 20:23:12 字數 1332 閱讀 5083

你有乙個能量值l,在接下來的n天裡,你每天有兩個選擇:

1、增加l個食物

2、使l加一,

你第i天要吃ai個

a_i個

ai​個

食物,如果吃不到就會死掉,現在問你n天後你能活下去嗎,如果能那最多剩多少個食物?(有t組資料)

1

5 21 1 1 4 2

2
乙個可行的最優方案如下:

第一天製造2個單位的食物,第二天把l公升級到3,後面三天各製造3個單位的食物。

最後得到2+3+3+3-1-1-1-4-2=2單位的食物。

對於30%的資料,1⩽n

⩽20

,1\leqslant n\leqslant 20,

1⩽n⩽20

,且測試點中只有一組資料;

另外40%的資料,1⩽n

⩽1000

。1\leqslant n\leqslant 1000。

1⩽n⩽10

00。對於100%的資料,1⩽n

⩽100000,0

⩽l,a

i⩽10

9。

1\leqslant n\leqslant 100000,0\leqslant l,ai\leqslant 10^9。

1⩽n⩽10

0000

,0⩽l

,ai⩽

109。

我們可以如果當前是第i天,增加l的奉獻是n−i

n-in−

i,即接下來n−i

n-in−

i天能量多1

當l大於n−l

n-ln−

l時我們就不考慮加l了

那如果當前天不夠食物,我們就要撤回之前的加l改為加食物,因為加l的奉獻到當前狀態還不一定會大於加食物的奉獻(詳情見**)

#include

#include

#include

#include

#define ll long long

using

namespace std;

ll t, n, l, x, add, sum, a[

100500];

//a存某一次加l的時間

intmain()

if(sum < x) sum =-1

;//還不夠

else sum -

= x;

//夠了

}else

}printf

("%lld\n"

, sum);}

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 2318)

在x軸上給出n條線段,讓你選m條線段,使他們的相交部分盡量大 4 6 33 8 4 12 2 61 10 5 911 124 1 2 4我們先從左到右選m條線段,然後用乙個小根堆來存這m條線段的結束位置,然後每遇到一條線,就判斷結束位置是否比堆中最小結束位置小,如果是那麼刪掉堆中的那條線段,然後加上...