洛谷題目鏈結
動態規劃:
首先,仔細看題目明確一點,如果要拔高,無論怎麼拔,拔高的區間右端點一定是$n$,為什麼呢?
這樣做:
$1、$對於區間左邊,不會減小以前的最優決策
$2、$對於區間內,兩兩之間相對高度不會發生變化
$3、$對於區間右邊,會減小它們進入最優序列的可能性
所以操作區間在右端點就可以解決第三個問題
那麼考慮$dp$:
設$f[i][j]$表示前面$i$個中拔高了$j$次,最多的保留數
狀態轉移也非常明顯:$$f[i][j]=max(f[k][l])+1$$
顯然需要乙個可以快速求出二維最大值的資料結構
這裡用的樹狀陣列,直接套上模板,查詢區間最大值即可
**:
#include#include#include#define n 10007#define k 507
#define m 6000
#define lowbit(x) x&(-x)
using namespace std;
int n,k,maxn,ans;
int val[n],tree[m][k];
void update(int pos,int val,int h)
int search(int pos,int h)
int main()
for(int i=1;i<=n;++i)
for(int j=k;j>=0;--j)
printf("%d",ans);
return 0;
}
SCOI2014 方伯伯的玉公尺田
題目 首先乙個很顯然的事實,我們所有操作的區間的右端點都是 n 即我們操作的區間是一些字尾 這個很好理解啊,我們使得乙個區間整體增加是為了盡可能和前面的點形成不降子串行,並沒有必要僅提公升一段區間的高度使得這一段難以和後面的接上,所以直接操作到 n 一定是最優的。設 dp 表示前 i 個字尾操作共操...
SCOI2014 方伯伯的玉公尺田
方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度...
方伯伯的玉公尺田 SCOI2014
方伯伯在自己的農田邊散步,他突然發現田裡的一排玉公尺非常的不美。這排玉公尺一共有n株,它們的高度參差不齊。方伯伯認為單調不下降序列很美,所以他決定先把一些玉公尺拔高,再把破壞美感的玉公尺拔除掉,使得剩下的玉公尺的高度構成乙個單調不下降序列。方伯伯可以選擇乙個區間,把這個區間的玉公尺全部拔高1單位高度...