HDU 3607 線段樹 離散化 DP

2021-06-29 08:16:59 字數 728 閱讀 1756

n個連續的盒子,每個盒子有高度h和價值v,選擇任意一點進入,且從任意一點出來,進入後只能從左向右走,且每次走到的盒子高度必須更高,可以跳過低的盒子

狀態轉移方程:dp[i]=max(dp[j])+v[i], (0<=jh[j])

用線段樹優化,尋找  j

#include "stdio.h"

#include "string.h"

#include "queue"

#include "algorithm"

using namespace std;

struct mark

b[100100],mark[100100];

struct data

data[400010];

bool cmp(mark a,mark b)

int main()

sort(b+1,b+1+n,cmp);

h=1;

mark[b[1].id].h=1;

mark[b[1].id].v=b[1].v;

for (i=2;i<=n;i++)

build(0,h,1);

updata(mark[1].h,mark[1].v,1);

ans=mark[1].v;

for (i=2;i<=n;i++)

printf("%d\n",ans);

}return 0;

}

hdu 3450 離散化 dp 線段樹優化

題意 給你一串長度為n的序列,給乙個d,要求找出有幾個子串行能夠滿足兩個相鄰的元素之間差值不超過d。思路 dp。定義dp i 表示以第i個為結束的滿足條件的子串行的個數。轉移方程 dp i i 1j 1 dp j 1 abs num i num j d 答案就是dp陣列的總和最後扣掉n就可以了。此時...

HDU 3333 線段樹 離散化

只查詢區間不同的數的和 思路好題 對查詢離線 不斷的往每個位置插值 並把前面位置的值置為0 每查到乙個右端點 查詢一下 等價操作的轉換 離散化一下 include define mem a,b memset a,b,sizeof a define lson root 1 define rson ro...

HDU1199 離散化線段樹

題目大意 一段長度未知的線段,一種操作 a b c 表示區間 a,b 要塗的顏色,c w塗白色,c b塗黑色,問你最長的白色區間段時多長。解題思路 就快去南京邀請賽了,最近做題超沒狀態,cf rating一直掉,這麼簡單的線段樹離散化居然搞了我乙個晚上,糾結。開始用線段樹區間合併的方法做,wa到死,...