uva 707 Robbery 記憶化搜尋

2022-04-30 13:06:11 字數 1280 閱讀 1100

題意:乙個n*m的城市,有小偷會偷銀行,小偷偷東西t分鐘後,城市會被全部封鎖,然後會有q次排查,每次排查的範圍是乙個矩形,給出左上角座標(a,b)和右下角座標(c,d),格式為t a,b,c,d,表示這個範圍該時間小偷不再,輸出所有小偷可能在的位置和時間

分析:一共有三種情況,確定小偷所在的位置和時間,小偷逃離城市,一無所獲,要描述乙個狀態,至少要有三個量,(x,y,t),因為不知道小偷在哪,所以要嘗試t=1的時候小偷所有可能的位置,-1表示該狀態還未確定,0表示不在,1表示可能在,那麼從開始搜就行了,如果乙個狀態的後繼狀態不全部在不可能區域,說明他可能在該位置,記錄每個時間可能的座標,如果乙個時間可能的座標只有乙個,那麼久確定了小偷的位置

#include#include

#include

#include

#include

using

namespace

std;

const

int maxn=105

;int

dp[maxn][maxn][maxn];

intn,m,t,cnt;

int dx=;

int dy=;

struct

node

node(

int a,int

b):x(a),y(b){}

};vector

ans[maxn];

int dfs(int x, int y, int

tt) dp[x][y][tt] = 0

;

for(int i=0; i<5; i++)

}if(dp[x][y][tt])

return

dp[x][y][tt];

}int

main()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

if(dp[i][j][1]<0

) dfs(i,j,1);

printf(

"robbery #%d:\n

",cas++);

if(cnt==0

) printf(

"the robber has escaped.\n");

else

if(ok)

printf(

"nothing known.\n");

}puts(

"");

}return0;

}

view code

uva 116 (記憶化搜尋)

題意 如圖,從左到右走,每次可以往左上 up 左 fo 左下 dn 走,當走到第一行或最後一行時可以如圖穿越。求一條權值最小的路徑,並列印字典序最小的路徑。解析 狀態轉移方程 dp i j min dp i 1 m m j 1 up dp i j 1 fo dp i 1 m j 1 dn 字典序最小...

uva10626(記憶化搜尋)

題目大意 一瓶可樂需要花8元,自動販售機只收1元,5元,10元。每次插入的錢只能買一瓶。給出n瓶可樂,請問最少插入幾次錢可以買到所需要數量的可樂。思路 一共有以下幾種情況 8個1元 插入8次 3個1元 乙個5元 插入4次 3個1元 乙個10元 插入4次 找5元 1個10元 插入1次 找2 1元 2個...

UVA 1629 記憶化搜尋

有乙個n行m列的蛋糕,切蛋糕,要求最後每一塊蛋糕上恰好有乙個櫻桃。問切割線總長度最小是多少?記憶化搜尋。設dp l r u d 為切割從橫向從l到r,縱向從u到d的一塊蛋糕,切割線總長度的最小值。然後不斷dfs搜尋並記錄dp值,最後dp 0 m n 0 即為所求。include include in...