密室逃脫 dp

2021-09-12 22:35:06 字數 2430 閱讀 7927

題目大意:

有n個房間,i和i+1之間有扇門,能被開啟當且僅當第i個房間有ai個人按下按鈕或者第i+1個房間有bi個人按下按鈕。門開啟後人可以雙向通過。按按鈕的人不能移動,一旦放開按鈕門就會關死。現在要求你在每個房間放一些人,使得放的總人數最多,並且不存在一種方案使得第1個房間有至少m個人。n<=1000,m,ai,bi<=10000;

題解:神仙dp。

考慮這個操作是可逆的。考慮最後一定是讓所有人盡量往左勻,但是最後1房間只有少於m個人。那麼反過來就是列舉每個房間有多少人並盡量向右勻,但是要保證任意時刻右面的房間不能勻到左邊來。那麼設dp[i,j]表示第i個房間能從左邊勻出j個人待在i房間時,答案是多少。

那麼若j

jj​,那麼i+1房間要麼有少於bi個人:dp(

i,j)

+k→d

p(i+

1,k)

,k

dp(i,j)+k\rightarrow dp(i+1,k),kdp

(i,j

)+k→

dp(i

+1,k

),k​,要麼i+1房間恰好有bi個人,這時可以把這j個人勻到右邊去:dp(

i,j)

+j→d

p(i+

1,j+

bi

)dp(i,j)+j\rightarrow dp(i+1,j+b_i)

dp(i,j

)+j→

dp(i

+1,j

+bi​

);否則若ai≤

j

+b

ia_i\le jai

​≤j​+bi

​,那麼可以將i房間的j-ai個人勻到i+1房間(並且i+1房間不能有人,否則可以從右邊勻到左邊):dp(

i,j)

→dp(

i+1,

j−ai

)dp(i,j)\rightarrow dp(i+1,j-a_i)

dp(i,j

)→dp

(i+1

,j−a

i​);

否則a i+

bi≤j

a_i+b_i\le j

ai​+bi

​≤j,那麼所有人都可以到右邊:dp(

i,j)

→(i+

1,j)

dp(i,j)\rightarrow(i+1,j)

dp(i,j

)→(i

+1,j

)可以發現j

≤max⁡(

m,

max⁡(a

i+bi

))

j\le \max\left(m,\max(a_i+b_i)\right)

j≤max(m,

max(ai

​+bi

​))。

#include

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define rep(i,v) rep(i,0,(int)v.size()-1)

#define lint long long

#define ull unsigned lint

#define db long double

#define pb push_back

#define mp make_pair

#define fir first

#define sec second

#define gc getchar()

#define debug(x) cerr<<#x<<"="<#define sp <<" "

#define ln typedef pair<

int,

int> pii;

typedef set<

int>

::iterator sit;

inline

intinn()

const

int inf=

-1e7

,n=1003

,m=20004

;int a[n]

,b[n]

,f[2

][m]

;inline

void

upd(

int&x,

int y)

intmain()

rep(j,

0,b[i]-1

)upd

(nxt[j]

,pf+j);}

int ans=inf,

*now=f[n&1]

;rep

(i,0

,k)upd

(ans,now[i]);

return

!printf

("%d\n"

,ans)

;}

真人密室逃脫 魔戒

1 找到魔戒,將魔戒放入乙個箱子中間的孔中,箱子即開啟。魔戒一般有磁性,吸附在燈的支架上 2 開啟箱子,取出其中的書籍,根據書籍正面的文字找出人族的那個說明文件,裡面有年數。年數是其中乙個密碼鎖的密碼。書的背面是過215年後,指該年數加215,是另外乙個鎖的密碼。3 密碼開啟後,裡面有書籍卡片,裡面...

zzulioj 2133 密室逃脫

2133 密室逃脫 time limit 1 sec memory limit 128 mb submit 163 solved 19 submitstatusweb board description xor在玩密室逃脫,在某一關中,桌上有乙個一張紙,上面寫著 請根據所給例子求解答案從而獲得密碼 ...

gfoj Problem 787 密室逃脫

problem 787 密室逃脫 time limit 2000 ms memory limit 524288 kb problem description 小j被關在密室裡!密室的構造是乙個h w的棋盤,即有h行w列,第i行第j列的房間用ai,j 表示。若ai,j 則該房間的門是鎖上的 若ai,j...