fzu 2188 過河I(有難度的剪枝)

2021-07-05 15:11:00 字數 1816 閱讀 1326

**:

過河i

time limit:3000msmemory limit:32768kb64bit io format:%i64d & %i64u

submit

status

practice

fzu 2188

description

一天,小明需要把x隻羊和y只狼運輸到河對面。船可以容納n只動物和小明。每次小明划船時,都必須至少有乙隻動物來陪他,不然他會感到厭倦,不安。不論是船上還是岸上,狼的數量如果超過羊,狼就會把羊吃掉。小明需要把所有動物送到對面,且沒有羊被吃掉,最少需要多少次他才可以穿過這條河?

input

有多組資料,每組第一行輸入3個整數想x, y, n (0≤ x, y,n ≤ 200)

output

如果可以把所有動物都送過河,且沒有羊死亡,則輸出乙個整數:最少的次數。 否則輸出 -1 .

sample input

3 3 2 33 33 3

sample output

11 -1

hint

第乙個樣例

次數 船 方向 左岸 右岸(狼 羊)

0: 0 0 3 3 0 0

1: 2 0 > 1 3 2 0

2: 1 0 < 2 3 1 0

3: 2 0 > 0 3 3 0

4: 1 0 < 1 3 2 0

5: 0 2 > 1 1 2 2

6: 1 1 < 2 2 1 1

7: 0 2 > 2 0 1 3

8: 1 0 < 3 0 0 3

9: 2 0 > 1 0 2 3

10:1 0 < 2 0 1 3

11;2 0 > 0 0 3 3

分析:次數   羊    狼   方向   羊     狼

0;  3  3  0  0  0

1;  3  1  1  0  2

2;  3  2  0  0  1

3;  3  0  1  0  3

4;  3  1  0  0  2

5:  1  1  1  2  2

6:    2  2  0  1  1

7;  0  2  1  3  1

8;  0  3  0  3  0

9;  0  1  1  3  2

10;  0  2  0  3  1

11;  0  0  1  3  3

題目中有多個減枝描述;

「船可以容納n只動物」 && 「至少有乙隻動物來陪他」 && 「不論是船上還是岸上,狼的數量如果超過羊,狼就會把羊吃掉 」  && 「0≤ x, y,n ≤ 200」。

#include#include#include#include#includeusing namespace std;

bool vis[210][210][2];

int sx,sy,n;

struct node

;node cur,nxt;

queueque;

int main()

nxt.c=!cur.c; //表示船到達下一岸

nxt.cnt=cur.cnt+1;

for(int i=0;i<=cur.x;i++)// i 代表船上羊的數量。

for(int j=0;j<=cur.y;j++)// j 代表船上狼的數量。

{if(i+j==0) continue; //沒動物陪他

if(i+j>n) continue; //動物超過n只

if(i

FZU 2188 過河(bfs暴力條件判斷)

過河i time limit 3000ms memory limit 32768kb 64bit io format i64d i64u submit status description 一天,小明需要把x隻羊和y只狼運輸到河對面。船可以容納n只動物和小明。每次小明划船時,都必須至少有乙隻動物來陪...

2188 猴子上樹

這一道題本人一開始看還以為是貪心。其實正解是乙個很普通的dp。首先,我們設乙個f i j 為前i棵樹,前j只猴子的答案。於是我們便可以得到乙個狀態轉移方程 f i j mi n f i 1 j 1 f i j 1 abs a i b j 其中a i 是第i只猴子的座標,b j 是第j棵樹的座標。但題...

BFS HRBUST 2188 星際旅行

星際旅行 time limit 1000 ms memory limit 32768 k total submit 150 66 users total accepted 80 60 users rating special judge no description 小z在星際旅行中,他想從當前起始...