bzoj2424 DP 單調佇列 訂貨

2021-08-15 17:24:55 字數 1275 閱讀 8550

description

某公司估計市場在第i個月對某產品的需求量為ui,已知在第i月該產品的訂貨單價為di,上個月月底未銷完的單位產品要付存貯費用m,假定第一月月初的庫存量為零,第n月月底的庫存量也為零,問如何安排這n個月訂購計畫,才能使成本最低?每月月初訂購,訂購後產品立即到貨,進庫並**市場,於當月被售掉則不必付存貯費。假設倉庫容量為s。

input

第1行:n, m, s (0<=n<=50, 0<=m<=10, 0<=s<=10000) 第2行:u1 , u2 , … , ui ,

… , un (0<=ui<=10000) 第3行:d1 , d2 , …, di , … , dn (0<=di<=100)

output

只有1行,乙個整數,代表最低成本

sample input

3 1 1000

2 4 8

1 2 4

sample output

題解

想都沒想直接ns^2先來個暴力,瞎轉移穩定tle

加個單調佇列優化

設f[i][j]為第i天,倉庫裡剩下j單位貨物,不計當月儲存費用的最小費用

那麼f[i][j]=min(f[i][j],f[i-1][k]+k*m+(j+u[i]-k)*d[i])

容易看得對於不同貨物k,l,當k比l優的時候,有如下

f[i-1][k]+k*m+(j+u[i]-k)*d[i]<f[i-1][l]+l*m+(j+u[i]-l)*d[i]

上單調佇列即可

但還要判一下,j+u[i]-k要大於等於0

#include

#include

#include

#include

#include

using

namespace

std;

int f[51][11000];

int u[51],d[51];

intlist[11000],head,tail;

int n,m,s;

int main()

*/ }

}printf("%d\n",f[n][0]);

return

0;}

單調佇列 DP

烽火傳遞 description 烽火台又稱烽燧,是重要的防禦設施,一般建在險要處或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達資訊 夜晚燃燒乾柴,以火光傳遞軍情。在某兩座城市之間有n個烽火台,每個烽火台發出訊號都有一定的代價。為了使情報準確的傳遞,在m個烽火台中至少要有乙個發出訊號。現輸...

單調佇列DP 斜率DP

考慮到知識點是單調佇列,考慮怎麼使用單調佇列 首先說明一點,小天使可以選擇當前時刻鋼琴是否移動 並非一次就要一段時間 考慮dp方程,由於每次只能走乙個方向,選擇不了,其實就相當於乙個一維的dp了 以往上 北 為例 t為第t段時間 f t i j max 變形為 f t i j max i 然後把 f...

dp單調佇列(詳解)

我們從最簡單的問題開始 給定乙個長度為n的整數數列a i i 0,1,n 1和窗長度k.要求 f i max,i 0,1,n 1 問題的另一種描述就是用乙個長度為k的窗在整數數列上移動,求窗裡面所包含的數的最大值。解法一 很直觀的一種解法,那就是從數列的開頭,將窗放上去,然後找到這最開始的k個數的最...