鋸木廠選址

2022-07-19 10:12:14 字數 903 閱讀 4133

這是我斜率dp第乙個沒有一遍ac的,原因是第一遍忘開long long了。

這一題比較特殊,細心的同學一定發現了,遞推式不帶f。

為了方便,設d陣列的字尾和為sd[i]=sd[i+1]+d[i],設k陣列的字首和為sk[i]=sk[i-1]+k[i](k[i]即是題目中的w[i])

設f[i]為第二個鋸木廠選在i時的最小值,假設第乙個鋸木廠在j,從1~j-1運到j的和是k[p]*(sd[p]-sd[j]),p∈[1,n],從j+1~i-1運到i的和是k[p]*(sd[p]-sd[i]),p∈[j+1,i]。

從i+1~n運到第三個鋸木廠的和是k[p]*sd[p],p∈[i+1,n]。設k[p]*sd[p]的和為sum。

要讓截距最大,且斜率sd[i]單調遞減,那麼考慮維護上凸包(不明白的一定要自己畫圖嘗試!!)

看**:

#includeusing namespacestd;

#define int long long

const int maxn=50000;

intn,d[maxn],sd[maxn],sum,sk[maxn],k[maxn];

intq[maxn],f[maxn];

int yval(int a,int b)

int xval(int a,int b)

signed main()

for(int i=n;i>=1;i--)

sd[i]=sd[i+1]+d[i];

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

sum+=k[i]*sd[i];

int l=1,r=1,ans=2147483647;

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

printf("%lld\n",ans);

return 0;

}

Two Sawmills 鋸木廠選址

斜率優化dp,應該說是第一道斜率優化dp了,推公式的時候各種坑,還是參照了hzq神牛的思路,細節方面稍有不同,為了思維方便,我先將給出的序列翻轉了,也就是把從山頂到山下的點順序邊成了從山下到山頂,編號從1開始,第乙個點即為海拔最低的伐木場,所以共有n 1個點,w i 表示第i個點的重量,dist i...

COGS鋸木廠選址(斜率優化)

這道題,需要選兩個鋸木廠,標定了選的份數,以前做的題都是可以分成任意的分數 實際上,這道題n 2列舉鋸木廠的位置,o 1 計算,找出最大值。算是斜率優化,感覺不是特別好說是斜率優化dp,因為這道題,當確定了第二個鋸木廠,第乙個鋸木廠的選擇是有決策單調性,其實斜率優化就是用了處理決策單調性的問題決策選...

BSOJ2684 鋸木廠選址(斜率優化)

從山頂上到山底下沿著一條直線種植了n棵老樹。當地的 決定把他們砍下來。為了不浪費任何一棵木材,樹被砍倒後要運送到鋸木廠。木材只能按照乙個方向運輸 朝山下運。山腳下有乙個鋸木廠。另外兩個鋸木廠將新修建在山路上。你必須決定在 修建兩個鋸木廠,使得傳輸的費用總和最小。假定運輸每公斤木材每公尺需要一分錢。任...