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

2021-10-02 15:48:34 字數 1446 閱讀 3132

n∗m

n*mn∗

m的格仔,格仔之間有道路,對於每個i

ii就走過最短的迴路使得

圈住i

ii個有價值的格仔

沒有圈住任何乙個壞格仔

判斷乙個點是否在乙個多邊形內,我們可以往任何乙個方向畫一條射線,如果與多邊形的交點為奇數那麼就在,否則就不在。

那麼我們考慮狀態壓縮fi,

j,sf_

fi,j,s

​表示走到(i,

j)

(i,j)

(i,j

)這個位置,往上畫線的交點為奇數的有用點格仔集合為sss。

然後b fs

bfsbf

s轉移即可。

#include

#include

#include

#include

#define lowbit(x) (x&-x)

using

namespace std;

const

int dx[4]

=,dy[4]

=;struct pointval[50]

,no[50]

;queue q;

int n,m,cnt1,cnt2,ans[50]

,f[55][

55][1500];

char c[55]

;int

count_one

(int x)

return ans;

}int

main()

;if(c[j]

=='x'

)no[

++cnt2]

=(point);}

}memset

(f,0x3f

,sizeof

(f))

; f[0]

[0][

0]=0

;q.push

((point));

while

(!q.

empty()

)if(k==3)

if(f[x]

[y][s]+1

[zy]

[tmp]))

; f[zx]

[zy]

[tmp]

=f[x]

[y][s]+1

;}}}

memset

(ans,

0x3f

,sizeof

(ans));

cnt1++

;for

(int i=

0;i<(1

<;i++

)for

(int i=

1;i<=cnt1;i++

)printf

("%d\n"

,ans[i]);

}

JZOJ 4016 圈地為王

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

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

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

JZOJ4016 雅禮聯考DAY01 圈地為王

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