WIKIOI 1319 玩具裝箱

2022-03-06 01:27:13 字數 1435 閱讀 2840

p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1...n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時如果乙個一維容器中有多個玩具,那麼兩件玩具之間要加入乙個單位長度的填充物,形式地說如果將第i件玩具到第j個玩具放到乙個容器中,那麼容器的長度將為 x=j-i+sigma(ck) i<=k<=j 製作容器的費用與容器的長度有關,根據教授研究,如果容器長度為x,其製作費用為(x-l)^2.其中l是乙個 常量。p教授不關心容器的數目,他可以製作出任意長度的容器,甚至超過l。但他希望費用最小.

第一行輸入兩個整數n,l.接下來n行輸入ci.1<=n<=50000,1<=l,ci<=10^7

輸出最小費用

5 434214

解題:斜率優化dp,詳細請參考perseawe

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 

11 #include

12 #include 13

#define ll long long

14#define pii pair15

#define inf 0x3f3f3f3f

16using

namespace

std;

17const

int maxn = 50010;18

intn,c,q[maxn],head,tail;

19ll dp[maxn],s[maxn];

20 ll g(int k,int

j)24 ll s(int k,int

j)27

intmain()

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

36 s[i] +=i;

37 c++;

38 dp[0] = 0

;39 head = tail = 0

;40 q[head] = 0;41

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

47 printf("

%lld\n

",dp[n]);48}

49return0;

50 }

view code

玩具裝箱 Codevs 1319 O N

題目位址 p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為 1.n 的 n 件玩具,第 i件玩具經過壓縮後變成一維長度為 ci 為了方便整理,p教授要求在乙個一維容器中的玩具編號是...

wikioi 裝箱問題

01揹包問題是最經典的動態規劃之一,這道題目甚至是這其中還簡單的一種,因為價值就是本身的重量了。本來比如,w是總重量限制,v是每個的價值。但一開始我都有點忘了,查詢了一下又勾起了回憶。1.它把總重量從1到w作為狀態,對初學者並不是很直觀的。但dp本來就是空間換時間的演算法,裡面經常以整數做狀態,數目...

題解 玩具裝箱

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