2017 7 30 玩具裝箱 思考記錄

2021-08-04 14:19:24 字數 897 閱讀 1178

終於明白斜率優化了、

這種東西說簡單也簡單,說難也難、還是看個人的理解角度

就是利用斜率單調、x單調這兩個性質,使得新的函式直線越來越陡,越來越往右(或相反)

答案是拿這個直線去卡以前最優值的點,這樣x、y、斜率都已知,就可以求截距b了

這樣截距難道不是單調的嗎?其實不一定,因為求的時候要受j的影響,所以這個直線取完值後對應的y值不滿足單調性(當前最優不一定是下乙個最優)

就要維護凸包,就是要在幾個單調性的基礎上把一些怎麼卡都不是最優的點去掉,,這些點就是不在凸包上的點

如果要求最小值,就維護下凸包,因為同樣直線的情況下,下邊緣是直線上移和左移最先碰到的

同理,如果要求最大值,就維護上凸包。

關於此題,先寫出dp方程,根據模擬條件,易寫出f[i]=min(f[i],f[i]+(i+qsum[i]-j-qsum[j]-l-1)^2);

由於項太多,拆時不好拆,故設s【i】=i+qsum【i】,l=l+1;

所以拆平方,可得:(沒有任何化簡)

在維護即可

碼:

#include#includeusing namespace std;

long long l,r,n,l,a[50005],f[50005],s[50005],q[50005];

double xl(long long a,long long b)

int main()

for(int i=1;i<=n;i++)s[i]+=i;

q[0]=0;

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

printf("%lld",f[n]);

}

題解 玩具裝箱

question text 首先有乙個基礎 dp 設 dp i 表示前 i 個物品裝完的最小價值,sum i 是 c 的字首和則 dp i min 對應到本題當中即可。更新佇列的時候,如果當前隊頭的斜率小於當前 i 對應直線的斜率,則捨棄 找到的第乙個就是我們要找的點。加入 i 的時候,判斷隊尾是不...

斜率優化DP 玩具裝箱

hnoi2008 玩具裝箱toy time limit 1000ms memory limit 165536k total submit 5 accepted 5 description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意...

BZOJ 1010 玩具裝箱

預處理字首和su mi j 1i ai,為區間求和作準備。這顯然是dp。設f i 表示前 i 件玩具花的最小費用。則有 邊界條件 f0 0 動態轉移方程 fi min fj i j 1 s umi sumj l 2 答案 fn 直接求解,時間複雜度為o n2 顯然會tle。考慮斜率優化。原來的方程太...