VIJOS P1617 超級教主

2021-06-17 19:54:10 字數 2002 閱讀 2527

lhx教主很能跳,因為orz他的人太多了。教主跳需要消耗能量,每跳1公尺就會消耗1點能量,如果教主有很多能量就能跳很高。

教主為了收集能量,來到了乙個神秘的地方,這個地方凡人是進不來的。在這裡,教主的正上方每100公尺處就有乙個能量球(也就是這些能量球位於海拔100,200,300……公尺處),每個能量球所能提供的能量是不同的,一共有n個能量球(也就是最後乙個能量球在n×100公尺處)。教主為了想收集能量,想跳著吃完所有的能量球。教主可以自由控制他每次跳的高度,接著他跳起把這個高度以下的能量球都吃了,他便能獲得能量球內的能量,接著吃到的能量球消失。教主不會輕功,教主不會二段跳,所以教主不能因新吃到的能量而變化此次跳躍的高度。並且教主還是生活在地球上的,所以教主每次跳完都會掉下來。

問教主若要吃完所有的能量球,最多還能保留多少能量。

第1行包含兩個正整數n,m,表示了能量球的個數和lhx教主的初始能量。

第2行包含n個非負整數,從左到右第i個數字依次從下向上描述了位於i×100公尺位置能量球包含的能量,整數之間用空格隔開。

僅包括乙個非負整數,為教主吃完所有能量球后最多保留的能量。

3 200

200 200 200

400

對於10%的資料,有n≤10;

對於20%的資料,有n≤100;

對於40%的資料,有n≤1000;

對於70%的資料,有n≤100000;

對於100%的資料,有n≤2000000。

保證對於所有資料,教主都能吃到所有的能量球,並且能量球包含的能量之和不超過2^31-1。

時限1s。

第1次跳100公尺,得到200能量,消耗100能量,所以落地後擁有300能量。

第2次跳300公尺,吃到剩下的第3棵能量球,消耗擁有的300能量,得到400能量。

若第1次跳200公尺,第2次跳300公尺,最後剩餘300能量。

題意:略

思路: dp + 單調佇列

資料規模是2000000, 只能用一維dp。

dp[i] 表示 吃完前i個, 剩下最大的能量.

先想個 o(n^2)的。

dp[i] = max(dp[i], dp[j] + sum[i] - sum[j] - i * 100);

化簡為 dp[i] = max(dp[i], dp[j] - sum[j]) + sum[i] - i * 100;

因為每次都是找  max(dp[j] - sum[j]); 而且要花費n次。 但是, i, i + 1 找的區間只是錯開一位。

所以可以用佇列優化。維護乙個單調遞減佇列。

#include #include #include #include #include #include using namespace std;

//單調性dp

const int v = 2000000 + 50;

const int maxn = 80 + 5;

const int mod = 10000 + 7;

const __int64 inf = 0x7fffffffffffffffll;

const int inf = 0x7fffffff;

int dp[v], sum[v]; //dp[i] 表示吃完前i個, 剩餘的最大能量

int m, n;

int que[v], front, rear; //單調遞減佇列優化 max(dp[j] - sum[j]);

void pushback(int i)

int get(int i)

int main()

dp[0] = m;

que[rear++] = 0;

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

printf("%d\n", dp[n]);

}

Vijos1617 超級教主

orz4 3 jump lhx教主很能跳,因為orz他的人太多了。教主跳需要消耗能量,每跳1公尺就會消耗1點能量,如果教主有很多能量就能跳很高。教主為了收集能量,來到了乙個神秘的地方,這個地方凡人是進不來的。在這裡,教主的正上方每100公尺處就有乙個能量球 也就是這些能量球位於海拔 100,200,...

react devtools超級簡單安裝教程

有時候看網上各路大神,寫如何安裝react devtools,大神就是大神,好多步驟一筆帶過,導致一些學習者看的一臉懵逼,今天我給大家講超級簡單的react devtools安裝步驟,相信看過的小夥伴兒不存在懵逼狀態,那就開始吧!首先宣告一下,必須安裝node哦,都準備學react了,node都不叫...

vijos p1526 超級漢諾塔

在yyhs有一種奇異的漢諾塔,在漢諾塔中存放的圓盤式上大下小的,且在同一塔上的相鄰兩個圓盤大小之和,恰為乙個質數,現有n根漢諾塔,問最多能將大小從1開始連續的圓盤放入這n個漢諾塔中。注意放入的順序必須是從1 n。乙個整數n 1 n 15 輸出最多能放的圓盤數目。27 樣例解釋 43 7 2 6 1 ...