lhx教主很能跳,因為orz他的人太多了。教主跳需要消耗能量,每跳1公尺就會消耗1點能量,如果教主有很多能量就能跳很高。
教主為了收集能量,來到了乙個神秘的地方,這個地方凡人是進不來的。在這裡,教主的正上方每100公尺處就有乙個能量球(也就是這些能量球位於海拔100,200,300……公尺處),每個能量球所能提供的能量是不同的,一共有n個能量球(也就是最後乙個能量球在n×100公尺處)。教主為了想收集能量,想跳著吃完所有的能量球。教主可以自由控制他每次跳的高度,接著他跳起把這個高度以下的能量球都吃了,他便能獲得能量球內的能量,接著吃到的能量球消失。教主不會輕功,教主不會二段跳,所以教主不能因新吃到的能量而變化此次跳躍的高度。並且教主還是生活在地球上的,所以教主每次跳完都會掉下來。
問教主若要吃完所有的能量球,最多還能保留多少能量。
第1行包含兩個正整數n,m,表示了能量球的個數和lhx教主的初始能量。
第2行包含n個非負整數,從左到右第i個數字依次從下向上描述了位於i×100公尺位置能量球包含的能量,整數之間用空格隔開。
僅包括乙個非負整數,為教主吃完所有能量球后最多保留的能量。
3 200200 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 ...