P2627 修剪草坪 單調佇列優化dp

2022-05-20 02:22:33 字數 1356 閱讀 9443

題目描述見鏈結 .

連續的工作的牛不超過 k

k 個 →

→ 第 i

i 頭牛若工作, 則左邊與其 相距最近的不工作的牛 座標範圍為 [i−

k,i]

[i−k

,i] .

所以可以想到 dpd

p, 設 f[i

,1/0

]f[i

,1/0

] 表示前 i

i 頭牛, 第 i

i 頭牛 工作/不工作 所能得到的最大價值,狀態

轉移狀態

轉移:f

[i,0

]=max⁡(f

[i−1

,0],

f[i−

1,1]

)f[i

,1]=

max⁡(f

[j,0

]+su

m[i]

−sum

[j])

=max⁡(

f[j,

0]−s

um[j

])+s

um[i

](j∈

[i−k

,i])

f[i,

0]=max(f

[i−1

,0],

f[i−

1,1]

)f[i

,1]=

max(f[

j,0]

+sum

[i]−

sum[

j])=

max(f[

j,0]

−sum

[j])

+sum

[i](

j∈[i

−k,i

])其中 f[i

,0]−

sum[

j]f[

i,0]

−sum

[j] 可以使用單調佇列優化 .

#include

#define reg register

typedef

long

long ll;

const

int maxn =

1e5+5;

int n;

int k;

int a[maxn]

;ll sum[maxn]

;ll f[maxn][2

];intmain()

printf

("%lld\n"

, std::

max(f[n][0

], f[n][1

]));

return0;

}

P2627 修剪草坪

在一年前贏得了小鎮的最佳草坪比賽後,farm john變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,farm john希望能夠再次奪冠。然而,farm john的草坪非常髒亂,因此,farm john只能夠讓他的奶牛來完成這項工作。farm john有n 1 n 100,000 ...

修剪草坪 單調佇列

這道題我們可以換乙個角度思考,把題意看成 我們找到哪些奶牛不選,且滿足每兩個相鄰的不選的奶牛之間不能間隔超過k,當這些不選的奶牛的貢獻總和最低時,我們選的奶牛貢獻就最高了!這個過程用單調佇列優化一下即可,然而博主太弱了,就用了個優先佇列 include include include include...

DP 單調佇列優化 修剪草坪

題目描述 在一年前贏得了小鎮的最佳草坪比賽後,約翰變得懶惰了,再也沒有修剪過草坪。現在,新一輪的比賽又開始了,約翰希望能夠再次奪冠。然而,約翰家的草坪非常髒亂,因此,約翰需要讓他的奶牛來完成這項工作。約翰家有n頭奶牛,排成一直線,編號為1到n。每只奶牛的能力是不同的,第i頭奶牛的能力為ei。靠在一起...