bzoj千題計畫235 bzoj2448 挖油

2022-03-01 21:07:44 字數 2122 閱讀 3699

一遍過,嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎,o(∩_∩)o~

題意是最小化最大值

設計區間dp

dp[i][j] 表示在能確定x不在區間[i,j]內,或確定x在區間[i,j]內某個位置的最壞情況下的最小值

dp[i][j]=min  k∈[i,j]

o(n^3)複雜度

#include#include

#include

using

namespace

std;

#define n 2002

inta[n];

intdp[n][n];

void read(int &x)}

intmain()

view code

優化:把max去掉,就可以使用單調佇列優化了

很顯然的結論是長區間的dp值一定》=它的子區間的dp值

當固定i和j時,隨著k的遞增,dp[i][k-1]單調不降,dp[k+1][j]單調不增

所以一定可以找到乙個分界點g,

當k∈[i,g]時,dp[i][k-1]>dp[k+1][j]

當k∈[g+1,j]時,dp[k+1][j]>dp[i][k-1]

所以上述轉移方程變為

當k∈[i,g]時,dp[i][j]=min

當k∈[g+1,j]時,dp[i][j]=min

用g[i][j]表示對於每對i,j 求出的g

對於 當k∈[i,g[i][j] ]時,dp[i][j]=min

可以得出結論 g[a][b]<=g[a][b+1]

因為這裡是前面的dp值》後面的dp值,[a,b+1]在[a,b]後面加了乙個位置,

後面的dp值不變或增大,前面要包含更多的位置使前面變的更大,才能》=後面,所以g的位置不變或後移

所以固定區間左端點,隨右端點的右移,g單調不減

對於 當k∈[g[i][j]+1,j]時,dp[i][j]=min

可以得出結論 g[a-1][b]<=g[a][b]

因為這裡是後面的dp值》前面的dp值,[a-1,b]在[a,b]前面加了乙個乙個位置

前面的dp值不變或增大,後面要包含更多的位置使後面變的更大,才能》=前面,所以g的位置不變或前移

所以固定區間右端點,隨左端點的左移,g單調不增

所以可維護n+1個單調佇列

乙個表示固定左端點,n個表示固定右端點

因為是左端點從n倒序列舉,右端點從左端點正序列舉

所以固定左端點的只需要用乙個,左端點改變的時候清空佇列即可

但是右端點是跳來跳去的,所以要用n個

實際實現的時候可以不計算g

如果要計算g的話,由上面可以得出結論

g[a-1][b]<=g[a][b]<=g[a][b+1]

利用g的單調性計算g

#include#include

#include

#include

using

namespace

std;

#define n 2002

inta[n];

intdp[n][n];

intq[n][n];

inth[n],t[n];

#define a(x) dp[i][(x)-1]+a[(x)]

#define b(x) dp[(x)+1][j]+a[(x)]

void read(int &x)}

intmain()

}printf("%d

",dp[1

][n]);

}

time limit: 10 sec  memory limit: 128 mb

submit: 133  solved: 57

[submit][status][discuss]

給出一條線段,在左端點點0與右端點n+1間有n個點(n<=2000),並且在0到x之間的所有點都是有油的,在每個點鑽井判斷是否有油需要時間ti,求能夠知道x的最壞情況下最少需要多少時間。

第一行包含乙個數n,如題目描述。

第二行包含n個數,表示在第i個點鑽井判斷是否有油需要的時間。

輸出包含一行,最壞情況下最少需要多少時間。

48 24 12 6

42對於100%的資料,n<=2000,ti<=10^6

BZOJ 3208 花神的秒題計畫

time limit 16 sec memory limit 128 mb submit 704 solved 483 submit status discuss 背景 backboard memphis等一群蒟蒻出題中,花神湊過來秒題 描述 discribe 花花山峰巒起伏,峰頂常年被雪,memp...

Bzoj4326 運輸計畫

time limit 30 sec memory limit 128 mb submit 1091 solved 696 submit status discuss 公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1 條航道...

bzoj 4326運輸計畫

二分 樹上倍增 先放乙個用倍增法求解樹上距離的方法,我最開始又犯了那個錯誤 這段我最開始上下又寫反了。記性他就是不進腦子啊。再錯我tm是dog include using namespace std typedef long long ll typedef int lint typedef pair...