BZOJ 3208 記憶化搜尋 花神的秒題計畫

2022-03-06 20:02:34 字數 1428 閱讀 3241

背景【backboard】:

memphis等一群蒟蒻出題中,花神湊過來秒題……

描述【discribe】:

花花山峰巒起伏,峰頂常年被雪,memphis打算幫花花山風景區的人員開發乙個滑雪專案。

我們可以把風景區看作乙個nn的地圖,每個點有它的初始高度,滑雪只能從高處往低處滑【嚴格大於】。但是由於地勢經常變動【比如雪崩、滑坡】,高度經常變化;同時,**政策規定對於每個區域都要間歇地進行保護,防止環境破壞。現在,滑雪專案的要求是給出每個nn個點的初始高度,並給出m個命令,c a b c表示座標為a,b的點的高度改為c;s a b c d表示左上角為a,b右下角為c,d的矩形地區開始進行保護,即不能繼續滑雪;b a b c d表示左上角為a b,右下角為c d的矩形地區取消保護,即可以開始滑雪;q表示詢問現在該風景區可以滑雪的最長路徑為多少。對於每個q要作一次回答。

花神一看,這不是超簡單!立刻秒出了標算~

input

第一行n,第二行開始n*n的地圖,意義如上;接下來乙個m,然後是m個命令,如上

output

對於每乙個q輸出單獨一行的回答

sample input 1

1 2 3 4 5

10 9 8 7 6

11 12 13 14 15

20 19 18 17 16

21 22 23 24 25

c 1 1 3

qs 1 3 5 5

s 3 1 5 5

qsample output 1

樣例解釋:

第乙個q路線為:25->24->23->22….->3->2

第二個q的路線為:10->9->2

記憶化搜尋

ac**

#includeusing namespace std;

/*std::ios_base::sync_with_stdio;也超時

*/const int inf = 0x3f3f3f3f;

const int maxn = 1010;

int n;

int f[maxn][maxn];

int g[maxn][maxn];

int vis[maxn][maxn];

int dr[4][2] = ,,,};

bool in(int x,int y)

//f[x][y]含義:從這個點出發 所能走的最大長度

int dfs(int x,int y)

} return f[x][y] = res; //存

}int main()

} int m;

cin>>m;

while(m--)

}}else if(ch=='b')

} }else if(ch=='c')else

} cout<} }

return 0;

}

BZOJ 3208 花神的秒題計畫

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

BZOj 3208 食物 生成函式 廣義二項式定理

曾經搞過幾天的生成函式,也沒做幾道題,後來放棄了,今天講了生成函式和揹包問題的結合,趁著腦子清醒整理一下 題目描述 明明這次又要出去旅遊了,和上次不同的是,他這次要去宇宙探險!我們暫且不討論他有多麼nc,他又幻想了他應該帶一些什麼東西。理所當然的,你當然要幫他計算攜帶n件物品的方案數。當然,他又有一...

記憶化搜尋

演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...