p3287 [scoi2014]方伯伯的玉公尺田
方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度,他可以進行最多k次這樣的操作。拔玉公尺則可以隨意選擇乙個集合的玉公尺拔掉。問能最多剩多少株玉公尺,來構成一排美麗的玉公尺。
輸入格式:
第1行包含2個整數n,k,分別表示這排玉公尺的數目以及最多可進行多少次操作。第2行包含n個整數,第i個數表示這排玉公尺,從左到右第i株玉公尺的高度ai。
輸出格式:
輸出1個整數,最多剩下的玉公尺數。
輸入樣例#1: 複製
3 1輸出樣例#1: 複製2 1 3
31 < n < 10000,1 < k <= 500,1 <= ai <=5000
題解:dp[i][p]表示處理到第i個玉公尺,增加了p的高度的最多剩餘玉公尺;
dp[i][p] = max(dp[j][k]) + 1 (a[j] + k <= a[i]+p && k <= p);
這個就可以用乙個樹狀樹組維護;
#include #includeview code#include
#include
#include
#include
using
namespace
std;
const
int m = 6000 + 5
;int c[505][m], dp[m][505], a[100005
];int query(int x, int
y)void add(int x, int y, int
val)
intmain()
}printf(
"%d\n
", ans);
}
P3287 SCOI2014 方伯伯的玉公尺田
首先可以證明,一定存在一種最優解,每次選擇的區間結尾都是 n 因為如果某乙個區間結尾不是 n 將其替換成 n 仍然保持單調不下降。接著都按這個策略拔高玉公尺。令 f 表示 1 sim i 這段字首進行了 j 次操作,第 boldsymbol i 株玉公尺不被拔掉,所能剩下最多的玉公尺。f max p...
P3285 SCOI2014 方伯伯的OJ
因為 n leq 10 8 m leq 10 5 所以可以用乙個域很大的權值線段樹動態開點維護。開始 l 1 r n l,r 的點值看作 1 把乙個位置的數提前相當於 l 1 的位置加 1 原來的位置 1 變為 0 放後也類似。用兩個 map 維護數的位置和編號的相互對映。include defin...
SCOI2014 方伯伯的OJ
資料範圍 n 108 m 105 n 108 m 105 一眼平衡樹。5分鐘出思路,調了3小時。我們不好直接維護排名的平衡樹,也不好直接維護編號的平衡樹。那就建2 2 顆平衡樹,一棵以編號中序遍歷,一棵以排名中序遍歷,每個節點開pa ir role presentation style positi...