傳送門
題目描述:
在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。
然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 n(1
≤n
≤100
,000
)n(1≤n≤100,000)
n(1≤n≤
100,
000)
只排成一排的奶牛,編號為 1,2
,...
,n
1,2,...,n
1,2,..
.,n。每只奶牛的效率是不同的,奶牛 i
ii 的效率為 ei(
0≤ei
≤1
,000
,000
,000
)e_i(0≤e_i≤1,000,000,000)
ei(0≤
ei≤
1,00
0,00
0,00
0)。靠近的奶牛們很熟悉,因此,如果 fj 安排超過 k
kk 只連續的奶牛,那麼,這些奶牛就會罷工去開派對。因此,現在 fj 需要你的幫助,計算 fj 可以得到的最大效率,並且該方案中沒有連續的超過 k
kk 只奶牛。
輸入格式:
第一行:空格隔開的兩個整數 n
nn 和 kkk
第二到 n+1
n+1n+
1 行:第 i+1
i+1i+
1 行有乙個整數 e
ie_i
ei輸出格式:
乙個值,表示 fj 可以得到的最大的效率值。
資料樣例:輸入
5 2123
45 輸出
12 【樣例解釋】
fj 有 5
55 只奶牛,他們的效率為 1
11,2
22,3
33,4
44,5
55。他們希望選取效率總和最大的奶牛,但是他不能選取超過 2
22 只連續的奶牛
fj 可以選擇出了第三隻以外的其他奶牛,總的效率為 1+2
+4+5
=12
1+2+4+5=12
1+2+4+
5=12
。我們可以轉化一下問題,題目要我們最大化選出的奶牛的效率,我們可以最小化不選的奶牛的效率。
不難發現乙個性質:兩頭相鄰的不選的奶牛間最多只能有 k
kk 頭奶牛。
用 f
if_i
fi 表示不選 i
ii 時最小的效率,顯然它可以從 fi−
k−1f_
fi−k−1
~ fi−
1f_
fi−1
中轉移過來。
但是直接暴力列舉來轉移會超時,考慮用單調佇列來優化 dp。
單調佇列裡面記錄的是 f
if_i
fi,是單調遞增的,那麼隊首就是最小的,直接取隊首來轉移就可以了。
然後在 fn−
kf_
fn−k
~ f
nf_n
fn 中取個最小值,再用總效率減去它即可。
#include
#include
#include
#include
#define n 100005
using
namespace std;
deque<
int>q;
long
long f[n]
;int
main()
for(i=n-k;i++i)
min=
min(min,f[i]);
printf
("%lld"
,sum-min)
;return0;
}
usaco 購買飼料 修剪草坪
購買飼料 如約翰在鎮上,沿著公路開車回家,他的家離起點有e公里。他順便準備買k噸飼料回家。運送飼料是要花油錢的,如果他的車上有x噸飼料,行駛一公里需要x 2元,行駛d公里就 需要dx 2元。約翰可以從n家商店購買飼料,所有商店都在公路邊上,第i家店距離起點xi公里,飼料單價為每噸ci元,庫存為fi噸...
USACO13OPEN 重力異常
船長正在拯救她的船員,beefalo 博士。和所有偉大的冒險故事一樣,這個故事也是發生在乙個2d平面上的。囧 這個平面是m n的格仔組成的網格,代表著船長的世界的乙個側檢視。有些格仔是空的,另一些則是實心的,並且不能直接通過。很不幸的是,船長跳不起來。她必須遵守這個世界的特殊物理法則。1 如果船長的...
USACO2010open 時間旅行
題目描述 簡化版 對乙個數列可以如下維護 a k 加入數字k。s 刪除最近一次加入的數 保證數列中一定有數 t k 回到第k個操作之前的狀態。對每次操作輸出數列的最後乙個數,假如當前數列沒有數字,輸出 1。思路 依題意模擬。設a i 表示第i次操作時數列的最後乙個數,bef i 表示第i次操作之前一...