GMOJ4016 圈地為王

2022-06-14 02:30:18 字數 828 閱讀 9395

在 \(n\) 行 \(m\) 列的網格中,你要圈一些地。

你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。 你不可以進入網格內部, 只能在邊上行走。 你的路徑不能在左上角以外自交, 但是邊足夠寬, 你可以重複經過而不自交。

網格中有一些格仔對你很重要,你要盡量圈住它;而另一些格仔對你有壞處,你不能圈住它。

求圈住 \(i\) 個重要的格仔的最小路徑長度。

這道題挺妙的。

考慮如果乙個格仔正上方的邊經過了奇數次,那麼這個點最終就被圍住了,如果它上方的點經過了偶數次,那麼就沒有被圍住。

由於特殊點(重要點+壞點)只有\(10\)個。考慮狀壓。

設\(f[i][j][s]\)表示現在走到點\((i,j)\),每乙個重要點的上方經過的次數的奇偶性為\(s\)的最少步數。

那麼可以\(bfs\)轉移,注意維護\(s\)即可。

時間複雜度\(o(2^knm)\),其中\(k\)表示特殊點的個數。

#include #include #include #include using namespace std;

const int n=55,maxn=1025,inf=1e9;

const int dx=,dy=;

int n,m,cnt,sbad,f[n][n][maxn],s[n][n],id[n][n],ans[n];

char a[n][n];

queueqx,qy,qs;

void bfs()

for (int i=1;ans[i]printf("%d\n",ans[i]);

return 0;

}

JZOJ 4016 圈地為王

description 在 n 行 m 列的網格中,你要圈一些地。你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。你不可以進入網格內部,只能在邊上行走。你的路徑不能在左上角以外自交,但是邊足夠寬,你可以重複經過而不自交。網格中有一些格仔對你很重要,你要盡量圈住它 而另一些格仔對你有壞處,...

搜尋,計算幾何 JZOJ 4016 圈地為王

在 n 行 m 列的網格中,你要圈一些地。你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。你不可以進入網格內部,只能在邊上行走。你的路徑不能在左上角以外自交,但是邊足夠寬,你可以重複經過而不自交。網格中有一些格仔對你很重要,你要盡量圈住它 而另一些格仔對你有壞處,你不能圈住它。求圈住 i...

jzoj4016 圈地為王 狀壓,bfs,幾何

n m n mn m的格仔,格仔之間有道路,對於每個i ii就走過最短的迴路使得 圈住i ii個有價值的格仔 沒有圈住任何乙個壞格仔 判斷乙個點是否在乙個多邊形內,我們可以往任何乙個方向畫一條射線,如果與多邊形的交點為奇數那麼就在,否則就不在。那麼我們考慮狀態壓縮fi,j,sf fi,j,s 表示走...