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