乾草堆[單調佇列優化DP]
f[i] 表示到第i個時,第i個下面的乾草的寬度
很明顯寬度越窄,高度越高
需滿足
也就是
我們發現,對於k>j>i,若
則j比k優
#include<bits/stdc++.h> #define N 100005 using namespace std; int f[N],g[N],n,a[N],pre[N],q[N]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); pre[i]=pre[i-1]+a[i]; } int l=1,r=1; q[1]=n+1; for(int i=n;i>=1;i--){ while(l<r && pre[q[l+1]-1] - pre[i-1] >= f[q[l+1]]) l++; f[i] = pre[q[l]-1] - pre[i-1]; g[i] = g[q[l]] + 1; while(l<r && pre[q[r]-1] - f[q[r]] <= pre[i-1] - f[i]) r--; q[++r]=i; }printf("%d",g[1]); return 0; }
相關推薦
乾草堆[單調佇列優化DP]
傳送門 f[i] 表示到第i個時,第i個下面的乾草的寬度 很明顯寬度越窄,高度越高 需滿足 也就是 我們發現,對於k>j>i,若 則j比k優 #include<bits/stdc++.h> #define N 10000
BZOJ P1233 乾草堆tower 【單調佇列優化DP】
題目分析: 我們用F[I]F[I]表示用第ININ包做草堆的時候最底下一層的最短長度,G[I]G[I]記錄此時能到達的最高高度,顯然可以得到如下的一個狀態轉移方程: if(J>I,F[J]<=Sum[J−1]−Sum[I−1])if(J>I
2018.10.29 bzoj1023: [SHOI2008]cactus仙人掌圖(仙人掌+單調佇列優化dp)
傳送門 求仙人掌的直徑。 感覺不是很難。 分點在環上面和不在環上分類討論。 不在環上直接樹形 d p
CF939F Cutlet (單調佇列優化DP)
題目大意:要煎一塊有兩個面的肉,只能在一段k不相交的時間段$[l_{i},r_{i}]$內翻轉,求$2*n$秒後,保證兩個面煎的時間一樣長時,需要最少的翻轉次數,$n<=100000$,$k<=100$ 神仙單調佇列優化$DP$, [NOI2005]瑰麗華爾茲 也有類似的壓時間段的套路,但這道題
[USACO18JAN]Lifeguards P 洛谷黑題,單調佇列優化DP
傳送門:戳我 這道題有兩個版本,S和P,S是K等於1的情況,顯然可以用線段樹水過。 P版本就難了很多,洛谷黑題(NOI/NOI+/CTSC),嘿嘿。 我自己也不是很理解,照著題解寫了一遍,然後悟到了一點東西。 dp方程很好想: dp[i][j]表示處理到第i個元素,已經刪掉了j個,但取了第i個。
POJ - 2823 Sliding Window【單調佇列優化dp && c++快讀】
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 72718 &nb
股票交易[單調佇列優化DP]
傳送門 我們用f[i][j] 表示交易到第i天,手上有j個股票的最大收益 對於買入 變一下形 單調佇列維護min中的一坨就可以了 #include<bits/stdc++.h> #define N 5005 using namespace std; i
單調佇列優化 dp
The only difference between easy and hard versions is the constraints. Vova likes pictures with kittens. The news feed in the social network he uses can b
POJ 1821 Fence (單調佇列優化DP)
題目大意:有k個工人,有一排n個磚頭,現在要給磚頭染色,每個工人要麼不染色,要麼選擇一個包含$s_{i}$的,長度不大於$l_{i}$的區域進行染色,然後他們會獲得$len\cdot p_{i}$的報酬,求使所有工人總報酬最大的方案,輸出最大報酬 定義$f[i][j]$表示已經遍歷到了第i個工人,遍歷到了第
BZOJ2806: [Ctsc2012]Cheat(廣義字尾自動機,單調佇列優化Dp)
Description Input 第一行兩個整數N,M表示待檢查的作文數量,和小強的標準作文庫的行數接下來M行的01串,表示標準作文庫接下來N行的01串,表示N篇作文 Output N行,每行一個整數,表示這篇作文的Lo 值。 Sample Input
BZOJ 3126 [USACO2013 Open]Photo (單調佇列優化DP)
題目大意:給你一個長度為$n$的序列和$m$個區間,每個區間內有且僅有一個1,其它數必須是0,求整個序列中數字1最多的數量 神題,竟然是$DP$ 定義$f_{i}$表示第i位放一個1時,最多的1的數量 因為每個區間至少一個點,如果要在$i$位置放一個1,顯然在$i$左側沒覆蓋$i$的區間中,選擇一個位置
[poj 1821] Fence {單調佇列優化dp}
題目 http://poj.org/problem?id=1821 解題思路 先把所有工匠按照 S i
2018.09.23 孫悟空大戰鯉魚精(單調佇列優化dp)
傳送門 一道帶了spj的單調佇列優化dp。 注意元素入隊和出隊的條件。 程式碼: #include<bits/stdc++.h> #define N 200005 using namespa
2018.09.26洛谷P3957 跳房子(二分+單調佇列優化dp)
傳送門 表示去年考普及組的時候失了智,現在看來並不是很難啊。 直接二分答案然後單調佇列優化dp檢驗就行了。 注意入隊和出隊的條件。 程式碼: #include<bits/stdc++.h>
2823 Sliding Window【單調佇列優化dp && c++快讀】
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 72718 Acc
【題解】洛谷P4853[非酋yyf的sif之旅]B.yyf hates choukapai 單調佇列優化DP
題目連結 賽後題解 #include<cstdio> const int M=8e4+5,C=3e3+5,N=45,S=N*C+M; int a[S],b[S],n,m,c,d,sum,hd[N],tl[N],s,q[N][S][2],f[S]
bzoj 1499 [NOI2005]瑰麗華爾茲 (單調佇列優化DP)
題目大意:給你一個n*m棋盤(n,m<=200),有一個人從給定的點s,e出發,有一些壞點不能走,一共給定k段連續的時間(k<=200),在某一段時間之內它只能向一個給定的方向移動,在某一時刻,它可以移動或者不移動。求碰到壞點之前/總時間結束時,最長移動的距離。
BZOJ1855 || P2569 [SCOI2010]股票交易【單調佇列優化DP】
Time Limit: 5 Sec Memory Limit: 64 MB Description 最近lxhgww又迷上了投資股票,通過一段時間的觀察和學習,他總結出了股票行情的一些規律。 通過一段時間的觀察,lxhgww預測到了未來T天內某隻股票的走勢,第i
單調佇列優化dp--bzoj1705
傳送門 暴力的dp是1e9的,是這樣一樣轉移式: f[i][j]=min{f[i−1][k]+∣j−k∣∗c}+(j−a[i])2f[i][j]=min\{f[i-1][k]+|j-k|*c\}+(j-
Watching Fireworks is Fun -單調佇列優化DP
題意:一個城鎮有n個區域,從左到右1-n,每個區域之間距離1個單位距離。節日中有m個煙火要放,給定放的地點a[ i ]、時間t[ i ] ,如果你當時在區域x,那麼你可以獲得b[ i ] - | a[ i ] - x |的happiness 。你每個單位時間可以移