SCOI2014 方伯伯的玉公尺田

2022-05-10 21:49:08 字數 935 閱讀 1249

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。

這排玉公尺一共有n株,它們的高度參差不齊。

方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。

方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度,他可以進行最多k次這樣的操作。拔玉公尺則可以隨意選擇乙個集合的玉公尺拔掉。

問能最多剩多少株玉公尺,來構成一排美麗的玉公尺。

第1行包含2個整數n,k,分別表示這排玉公尺的數目以及最多可進行多少次操作。

第2行包含n個整數,第i個數表示這排玉公尺,從左到右第i株玉公尺的高度ai。

輸出1個整數,最多剩下的玉公尺數。

3 12 1 3

31 < n < 10000,1 < k ≤ 500,1 ≤ ai ≤5000

顯然一次增加的區間肯定是[x,n],即以n為右端點

於是dp

f[i][j]表示到了i,提高了j次

f[i][j]=max(f[l][k])+1

要求便是a[i]+j-k>=a[l]

所以a[i]+j>=a[l]+k且j>=k

因為k不大

所以維護乙個2維樹狀陣列轉移

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7int c[6001][510],a[10001

],sz,n,k;

8void add(int x,int y,int

v)9 15}

16int query(int x,int

y)17

24return

s;25}26

intmain()

27 38 cout<39 }

SCOI2014 方伯伯的玉公尺田

題目 首先乙個很顯然的事實,我們所有操作的區間的右端點都是 n 即我們操作的區間是一些字尾 這個很好理解啊,我們使得乙個區間整體增加是為了盡可能和前面的點形成不降子串行,並沒有必要僅提公升一段區間的高度使得這一段難以和後面的接上,所以直接操作到 n 一定是最優的。設 dp 表示前 i 個字尾操作共操...

SCOI2014 方伯伯的玉公尺田

洛谷題目鏈結 動態規劃 首先,仔細看題目明確一點,如果要拔高,無論怎麼拔,拔高的區間右端點一定是 n 為什麼呢?這樣做 1 對於區間左邊,不會減小以前的最優決策 2 對於區間內,兩兩之間相對高度不會發生變化 3 對於區間右邊,會減小它們進入最優序列的可能性 所以操作區間在右端點就可以解決第三個問題 ...

方伯伯的玉公尺田 SCOI2014

方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度...