JZOJ 4016 圈地為王

2022-07-15 01:36:10 字數 1413 閱讀 9773

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...