Usaco 2011 Open 修剪草坪

2021-09-10 23:59:51 字數 2035 閱讀 3870

傳送門

題目描述:

在一年前贏得了小鎮的最佳草坪比賽後,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次操作之前一...