這道題,需要選兩個鋸木廠,標定了選的份數,以前做的題都是可以分成任意的分數
實際上,這道題n^2列舉鋸木廠的位置,o( 1 ) 計算,找出最大值。
算是斜率優化,感覺不是特別好說是斜率優化dp,因為這道題,當確定了第二個鋸木廠,第乙個鋸木廠的選擇是有決策單調性,其實斜率優化就是用了處理決策單調性的問題決策選取的,這道題推式子可以推出來斜率式,能推出斜率的式子,就可以來用單調佇列維護決策處理單調性了
#include#include#include#include#includeusing namespace std;
typedef long long ll;
ll sum[200505],dis[200505],f[200505],ans=20000000005,s[200505];
int n,q[200505],head,tail;
ll getup(int j,int k)
ll getdown(int j,int k)
ll getdp(int i,int j)
int main()
{ freopen("two.in","r",stdin);
freopen("two.out","w",stdout);
scanf("%d",&n);
for (int i=n;i>=1;i--) scanf("%lld%lld",&sum[i],&dis[i]);
for (int i=1;i<=n;i++) dis[i]+=dis[i-1],sum[i]+=sum[i-1];
for (int i=1;i<=n;i++) s[i]=s[i-1]+(sum[i]-sum[i-1])*dis[i];
head=tail=1;
q[head]=0;
f[0]=0;//?
for (int i=1;i
鋸木廠選址
這是我斜率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時的最...
BSOJ2684 鋸木廠選址(斜率優化)
從山頂上到山底下沿著一條直線種植了n棵老樹。當地的 決定把他們砍下來。為了不浪費任何一棵木材,樹被砍倒後要運送到鋸木廠。木材只能按照乙個方向運輸 朝山下運。山腳下有乙個鋸木廠。另外兩個鋸木廠將新修建在山路上。你必須決定在 修建兩個鋸木廠,使得傳輸的費用總和最小。假定運輸每公斤木材每公尺需要一分錢。任...
Two Sawmills 鋸木廠選址
斜率優化dp,應該說是第一道斜率優化dp了,推公式的時候各種坑,還是參照了hzq神牛的思路,細節方面稍有不同,為了思維方便,我先將給出的序列翻轉了,也就是把從山頂到山下的點順序邊成了從山下到山頂,編號從1開始,第乙個點即為海拔最低的伐木場,所以共有n 1個點,w i 表示第i個點的重量,dist i...