4249 五校聯考7day1 遊戲

2021-09-10 09:26:44 字數 1367 閱讀 9243

wyf從小就愛亂頂,但是頂是會造成位移的。他之前水平有限,每次只能頂出k的位移,也就是從乙個整點頂到另乙個整點上。我們現在將之簡化到數軸上,即從 乙個整點可以頂到與自己相隔在k之內的數軸上的整點上。現在wyf的頭變多了,於是他能頂到更遠的地方,他能頂到任意整點上。現在他在玩乙個遊戲,這個遊 戲裡他只能向正方向頂,同時如果他從i頂到j,他將得到a[j] * (j - i)的分數,其中a[j]是j點上的分數,且要求j > i, 他最後必須停在n上。

現給出1~n上的所有分數,原點沒有分數。他現在在原點,沒有分。wyf想知道他最多能得多少分。

第一行乙個整數n。

第二行有n個整數,其中第i個數表示a[j]。

乙個整數,表示wyf最多能得到的分數。

3

1 1 50

150
對於60%的資料,n<=1000;

對於100%的資料,n<=100000,0<=a[j]<=50。

解法一:dp。設 f [ i ] 表示從0到 i 點中最多能得到的分數。那麼f[ i ]=max。可以用斜率優化優化到o(n)。對於到達的每個點,若要知道應該從哪個點過來,則要比較從兩個不同地方過來的答案進行比較。最後比較式整理成類似於( f[ i ] – f[ j ] )/( i – j) > ? 的形式。之後可以將( i, f[ i ] )變為二維上的一點,比較式就成為了兩點間的斜率是否大於乙個數。由於 i 是從小到大列舉的則計算出乙個 f[ i ] 時就把它插入到二維平面裡,之後只需維護斜率下降的一段(斜率上公升的一段不需要考慮),用棧來儲存點,維護凸包總時間複雜度為o(n),找最好節點用二分。總時間複雜度為 o( n*log( n ) )。

解法二:貪心。首先有乙個結論,每次走到最大的乙個點肯定是最優的。

證明:

設當前在點l,有區間[ l, r ],其中r這個點是區間[ l , r ]的最大值。

所以我們可以將a[ i ]排序後每次看看能否跳,能跳就跳,這樣就保證跳的是最大的了。

#include#include#include#define n 100010

using namespace std;

int n,m,x,ans;

struct nodea[n];

bool cmp(node x,node y)

int main()

sort(a+1,a+1+n,cmp);

x=0;

for(int i=1;i<=n;i++)

} printf("%d\n",ans);

return 0;

}

JZOJ 4249 五校聯考7day1 遊戲

description wyf從小就愛亂頂,但是頂是會造成位移的。他之前水平有限,每次只能頂出k的位移,也就是從乙個整點頂到另乙個整點上。我們現在將之簡化到數軸上,即從 乙個整點可以頂到與自己相隔在k之內的數軸上的整點上。現在wyf的頭變多了,於是他能頂到更遠的地方,他能頂到任意整點上。現在他在玩乙...

五校聯考7day1 遊戲

description wyf從小就愛亂頂,但是頂是會造成位移的。他之前水平有限,每次只能頂出k的位移,也就是從乙個整點頂到另乙個整點上。我們現在將之簡化到數軸上,即從 乙個整點可以頂到與自己相隔在k之內的數軸上的整點上。現在wyf的頭變多了,於是他能頂到更遠的地方,他能頂到任意整點上。現在他在玩乙...

五校聯考7day1 遊戲

description wyf從小就愛亂頂,但是頂是會造成位移的。他之前水平有限,每次只能頂出k的位移,也就是從乙個整點頂到另乙個整點上。我們現在將之簡化到數軸上,即從 乙個整點可以頂到與自己相隔在k之內的數軸上的整點上。現在wyf的頭變多了,於是他能頂到更遠的地方,他能頂到任意整點上。現在他在玩乙...