你有乙個能量值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條線段的結束位置,然後每遇到一條線,就判斷結束位置是否比堆中最小結束位置小,如果是那麼刪掉堆中的那條線段,然後加上...