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 #includeview code11 #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 }
玩具裝箱 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 的時候,判斷隊尾是不...