**:
過河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在星際旅行中,他想從當前起始...