description
在 n 行 m 列的網格中,你要圈一些地。
你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。 你不可以進入網格內部, 只能在邊上行走。 你的路徑不能在左上角以外自交, 但是邊足夠寬, 你可以重複經過而不自交。
網格中有一些格仔對你很重要,你要盡量圈住它;而另一些格仔對你有壞處,你不能圈住它。
求圈住 i 個重要的格仔的最小路徑長度。
考慮乙個點,判其是否在乙個區域內可以用射線法,這道題也一樣,考慮每個關鍵點上面是否有奇數條線段。
這可以充分描述狀態。
f[x][y][s] 為當前做到x y這個點,關鍵點的狀態為s的情況。
#include#define pii pair#define xo first#define yo second
#define n ((1<<11)+1)
//#define @ wertyuiodfghj
using
namespace
std;
struct
qwertyui
qwertyui(
int _x,int _y,int
_s):x(_x),y(_y),s(_s){}
};queue
q; char ch[139][139
];int n,m,pd[19],cnt,tot,dis[54][53
][n];
bool vis[54][54
][n];
pii t[
19];
const
int dx[4]=,dy[4]=;
intget(int s,int xx,int
yy)
returns;}
signed main ()
else
if (ch[i][j]=='i'
) }
memset(dis,
63,sizeof
dis);
intx,y,s;
q.push(qwertyui(
0,0,0
)); dis[
0][0][0]=0
;
while (!q.empty())}}
}int ans[19],ma=0
; memset(ans,
63,sizeof
ans);
for (int i=1;i<(1
<)
else ++tot;
}if (tot^-1
) }
for (int i=1;i<=ma;i++) printf("
%d\n
",ans[i]);
return0;
}
搜尋,計算幾何 JZOJ 4016 圈地為王
在 n 行 m 列的網格中,你要圈一些地。你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。你不可以進入網格內部,只能在邊上行走。你的路徑不能在左上角以外自交,但是邊足夠寬,你可以重複經過而不自交。網格中有一些格仔對你很重要,你要盡量圈住它 而另一些格仔對你有壞處,你不能圈住它。求圈住 i...
jzoj4016 圈地為王 狀壓,bfs,幾何
n m n mn m的格仔,格仔之間有道路,對於每個i ii就走過最短的迴路使得 圈住i ii個有價值的格仔 沒有圈住任何乙個壞格仔 判斷乙個點是否在乙個多邊形內,我們可以往任何乙個方向畫一條射線,如果與多邊形的交點為奇數那麼就在,否則就不在。那麼我們考慮狀態壓縮fi,j,sf fi,j,s 表示走...
JZOJ4016 雅禮聯考DAY01 圈地為王
在 n 行 m 列的網格中,你要圈一些地。你從左上角出發,最後返回左上角,路徑內部的區域視為被你圈住。你不可以進入網格內部,只能在邊上行走。你的路徑不能在左上角以外自交,但是邊足夠寬,你可以重複經過而不自交。網格中有一些格仔對你很重要,你要盡量圈住它 而另一些格仔對你有壞處,你不能圈住它。求圈住 i...