【填坑】DP·斜率優化&【hdu】3507
我們先給一個例子:
我們先給一個例子: 【hdu3507】給定n個正數與M(n∈[1,500000]),將它們分成若干段輸出。輸出一段的費用按下法計算:
c
o
背景
寫這篇文章,主要是為了以後面試方便。因為我簡歷上寫了,上一份工作的最大亮點是將人臉解鎖的速度由1200ms優化到了600ms,所以這些內容已經回答無數遍了。但每次總覺得回答的不完整,或者說總感覺可以發揮得更好,於是這裡做一些簡單的總結性的記錄。
&n 看到大家對上篇《Java面試中遇到的坑》一文表現出強力的關注度,說明大家確實在面試中遇到了類似的難題。大家在文章留言處積極留言探討面試中遇到的問題,其中幾位同學還提出了自己的見解,我感到非常高興,還有幾位同學強烈要求給出題目答案,那我很樂意跟大家一起探討分享這些題目。
我將題目答案寫下來,這個並非標準答案,
舉個例子來理解
16年瀋陽區域賽【樹形dp+斜率優化】
題意:
給你n個點,n-1條邊的樹。每條邊有一個權值w。給你一個值p。
1號節點為根節點。求1號點到所有節點的路徑中的最小權值 的最大值。
權值計算方法:將這條路可以一次走完,權值是(dis[u]-dis[1
KMP用於求b串在a串的出現位置(字串匹配)。我們通過一道題來講講KMP的演算法過程。 【HDU 1711】給定兩個數字串a、b。求b在a第一次出現的位置。若沒出現輸出-1。 一般的暴力演算法就是暴力匹配。若有一個位置匹配失敗,則回溯後重新匹配。時間複雜度高達
digi pos == spa tchar str 轉移 方程 決策單調 題目鏈接
\(Description\)
給定一個\(n\)個數的序列,最多將序列分為\(m+1\)段,每段的價值是這段中所有數兩兩相乘的和。求最小總價值。
\(Solution\)
寫到這突 printf 序列 -c int ret 復雜 不能 clu 整數
機器上有N個需要處理的任務,它們構成了一個序列。這些任務被標號為1到N,因此序列的排列為1,2,3...N。這N個任務被分成若幹批,每批包含相鄰的若幹任務。從時刻0開始,這些任務被分批加工,第i個任務單 open stream 斜率 tween include fin 直接 imu opened Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There‘s a leave ans cif HR PE long long The 最小 結果 Zxr960115 is owner of a large farm.幸運飛艇源碼下載(http://www.1159880099.com ) QQ1159880099 He feeds m c
題目連結:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5642
題意:給你n個點,n-1條邊的樹。 題目連結 資料範圍在這:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613,另外是$n\leq3\times10^5$。
用\(t_i\)表示加工時間的字首和,\(s_i\)表示費用係數\(F_i\)的字首和。 \(f_i\)表示以\(i\)作為某一組 思路
首先暴力DP顯然,可以得20分
加上一個字首和優化,可以得到40分
然後上斜率優化
設\(sum_i\)為\(\sum_{1}^iP_i\),\(sump_i\)為\(\sum_{1}^{i}P_i\times Pos_i\)
則決策j優於決策i的條件可以表示為
\[ dp_j+C_t+po 題意
題目連結
Sol
重新看了一遍斜率優化,感覺又有了一些新的認識。
首先把土地按照\((w, h)\)排序,用單調棧處理出每個位置第向左第一個比他大的位置,顯然這中間的元素是沒用的
設\(f[i]\)表示買了前\(i\)塊土地的最小花費
\(f[i] = min_{j = 0}^{i - 1} 題意
題目連結
Sol
裸的斜率優化,注意推導過程中的符號問題。
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#de 題意
題目連結
Sol
列舉第二個球放的位置,用字首和推一波之後發現可以斜率優化
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) ma 題意
題目連結
Sol
解題的關鍵是看到題目裡的提示。。。
設\(f[i]\)表示到第\(i\)天所持有軟妹幣的最大數量,顯然答案為\(max_{i = 1}^n f[i]\)
轉移為\(f_i = max(f_{i - 1}, A_i \frac{f_j R_j}{A_j R_j + B_j} +
題意:
設dp[i]=min dp[j]+(S+sumT[i]-sumT[j])*F[i] 1<=i<=N,i<j<=N+1,sumT[i]=T[i]+T[i+1]+...+T[N],sumF[i]=F[i]+F[i+1]+...+F 單調佇列斜率優化分析:
考慮dp[i],對i<j<k來說,如果保證決策k不比決策j差的條件是:
dp[j]+(s+sumt[i]-sumt[j])*sumf[i]>=dp[k]+(s+sumt[i]-sumt[j])*sumf[i];
整理得:
(dp[k]-dp[j])/(sumt[k]-
題目連結
Problem Description
Once upon a time, in the mystical continent, there is a frog kingdom, ruled by the oldest frog, the Elder. The kingdom co 目錄
前言吐槽
思路
錯誤
程式碼
/*
前言吐槽
我真的不知道是咋做的 不過大約就是棧的斜率優化 哪位大佬見識廣,給看看吧(乞討)
思路
s是值等於a[i]的字首和
轉移方程$f[i]=max(f[i],f[j-1]+a[i]*(s[i]-s[j]+1)*(s[i]-s[j
【hdu3507】給定n個正數與M(n∈[1,500000]),將它們分成若干段輸出。輸出一段的費用按下法計算:
cost=(i=1∑kai)2+M
求最小的
cost。
如果n小一些,這個題就應該屬於DP入門題的那一類了吧:
令
f[i]為輸出前
i段的最小費用,則有:
f[i]=min{f[j]+w(j+1,i)2+M∣1≤j<i},w(i,j)k=i∑jak
時間複雜度為
O(n2),絕壁TLE!
自閉ing…TAT
自閉夠了,接著想辦法優化
觀察這個DP式(假設j為一個決策點,即要更新
f[i]的點):
f[i]=f[j]+w(j+1,i)2+M
令
sum[i]為前i項之和,則有:
f[i]=f[j]+(sum[i]−sum[j])2+M
假設還有另一決策點k:
f[i]=f[k]+(sum[i]−sum[k])2+M
它比j更優,則有:
f[j]+(sum[i]−sum[j])2+M>f[k]+(sum[i]−sum[k])2+M
開啟括號,消去相同項:
f[j]−2sum[i]sum[j]+sum[j]2>f[k]−2sum[i]sum[k]+sum[k]2
整理一下:
2(sum[k]−sum[j])sum[i]>(sum[k]2−sum[j]2)+(f[k]−f[j])
令
Δx=2(sum[k]−sum[j]),Δy=(sum[k]2+f[k])−(sum[j]2+f[j])。因為
ai都是正數,所以
sum[i]單增。
若
k>j,則:
sum[i]>ΔxΔy=kl
等價於k比j優。
若
k<j,則:
sum[i]<ΔxΔy=
相關推薦
【填坑】DP·斜率優化&【hdu】3507
【填坑往事】Android手機鎖屏人臉解鎖優化過程實錄
Java面試中遇到的坑【填坑篇】
斜率優化理解【16年 瀋陽區域賽 The Elder 】
【填坑】KMP
HDU.2829.Lawrence(DP 斜率優化)
BZOJ2726:任務安排(DP+斜率優化+二分)
CodeForces - 311B:Cats Transport (DP+斜率優化)
幸運飛艇源碼下CodeForces - 311B:Cats Transport (DP+斜率優化)
2016年ACM/ICPC瀋陽賽區 I題(樹形dp+斜率優化)
BZOJ.2726.[SDOI2012]任務安排(DP 斜率優化)
P2120 [ZJOI2007]倉庫建設(dp+斜率優化)
BZOJ1597: [Usaco2008 Mar]土地購買(dp 斜率優化)
BZOJ1911: [Apio2010]特別行動隊(dp 斜率優化)
洛谷P4360 [CEOI2004]鋸木廠選址(dp 斜率優化)
洛谷P4027 [NOI2007]貨幣兌換(dp 斜率優化 cdq 二分)
poj 1180 Batch Scheduling dp斜率優化
poj 1180 dp 斜率優化
HDU 5956 The Elder(樹型DP+斜率優化)
bzoj4709 檸檬 單調棧,DP,斜率優化