斜率優化啊,這個東西挺玄學的.....我這個蒟蒻也是一知半解,現在把我會的都寫一下,希望神犇指教。
jyf說,斜率優化如果用平衡樹維護的話方程不一定要求具有單調性,但是如果用單調佇列維護的話就要。
能斜率優化的題目的狀態轉移方程通常是要選擇連續的一段,方程可以寫成f[i]表示前i個東西的最優值的方式
而所謂「打包類」問題就是指的可以用單調佇列維護的斜率優化題,因為它們的方程通常長成這樣:f[i]=min/max//分數線上方
int low(int j,int k)//分數線下方
int dpz(int i,int j)//dp值
int main()
head=tail=1;que[1]=0;
for(i=1;i<=n;i++)
printf("%d\n",f[n]);
}return 0;
} /*
因為要用單調佇列維護,所以要具有單調性?
*/這個也是入門題,斜率方程很容易寫,一步一步來就行了。
#include#include#include#include#include#include#include#include#includeusing namespace std;
int n,m;
long long sum[50005],x,f[50005];
int que[50005];
long long getdp(int i,int j)
long long up(int j,int k)
long long down(int j,int k)
int main()
//記得方程要-1
for(i=1;i<=n;i++)
printf("%lld",f[n]);
return 0;
}
這道題就是把土地按長從小到大排序後容易發現如果有一塊土地長和寬都小於另一塊土地,那麼就是可以免費購買的,我們刪去這樣的土地後得到的長是遞增的,寬是遞減的,再用斜率優化dp就行了,狀態轉移方程比上兩題還簡單。
#include#include#include#include#include#include#include#include#includeusing namespace std;
int n,cnt=0;
struct nodeart[50005];
long long f[50005];
int que[50005];
bool cmp(node a,node b)
long long getdp(int i,int j)
long long up(int j,int k)
long long down(int j,int k)
int main()
sort(art+1,art+1+n,cmp);
cnt=1;
for(i=2;i<=n;i++)
if(art[cnt].x<=art[i].x)art[++cnt]=art[i];
for(i=1;i<=cnt;i++)
const int n=1000005;
ll f[n],q[n],a[n],s[n];
int n;
ll up(int j,int k)
ll down(int j,int k)
int main()
{ int i,j,k,he=0,ta=0;
n=read();
for(i=1;i<=n;i++)a[i]=read(),s[i]=s[i-1]+i;
q[ta++]=0;//0要放進去!!!因為前面可以不修防禦塔!!!!
for(i=1;i<=n;i++){
while(he+1
單調佇列與斜率優化雜題
hdu3530 subsequence 給定乙個序列,求滿足 a leq max min leq b 的最長的子串行 n leq10 6 維護遞增遞減兩個單調佇列,若兩隊首之差大於 b 挪動較小左端點,並更新答案左端點 時間複雜度 o n poj1180 ioi2002 batch scheduli...
打包構建與效能優化
一,執行npm run build,會自動生成dist資料夾,有兩個靜態的js資源 增量發布 2.vue cli3,有個資源視覺化展示的命令,在npm,script npm run report 一樣會打包構建,但會多乙個report.html,檢視資源體積大小 資源體積大小視覺化圖 此時,monm...
CDQ分治與斜率優化DP 學習筆記
我們知道當斜率優化dp中的點的x座標不單調時,需要splay來維護凸殼,但是 量比較大,容易寫掛。我們還有一種神奇的做法 cdq分治。先把n個狀態排成乙個序列。考慮乙個分治過程solve l,r 每次分成 l,mid mid 1,r 兩部分。顯然對於fi只和1 i 1有關,所以我們solve l,m...