HDOJ 1495 非常可樂

2021-10-05 08:46:46 字數 1754 閱讀 4502

題目描述:

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。

輸入描述:

三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。

輸出描述:

如果能平分的話請輸出最少要倒的次數,否則輸出"no"。

輸入:

7 4 3

4 1 3

0 0 0

輸出:no3

題意:

字面意思

題解

寫的時候寫得腦殼疼

分情況討論一下搜尋

a->b,a->c

b->c,b->a

c->b,c->a

**:

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

100+5;

int a,b,c;

bool flag;

int vis[maxn]

[maxn]

[maxn]

;struct point

;void

bfs(

) point now;

//a->b

if(p.a !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

//a->c

if(p.a !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

//b->c

if(p.b !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

//b->a

if(p.b !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

//c->a

if(p.c !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

//c->b

if(p.c !=0)

elseif(

!vis[now.a]

[now.b]

[now.c])}

}printf

("no\n");

return;}

intmain()

else

}return0;

}

HDOJ1495 非常可樂 bfs

定義結構體儲存當前狀態的m,n,s杯中的可樂,t表示倒可樂次數。讀入m,n,s後保證m n s便於bfs,接下來就是6個方向的bfs。bfs結束的條件是m杯中無可樂,也就是當前n杯的可樂與當前s杯的可樂相等,且n杯的可樂為總可樂體積的一半。接下來就是s倒入 m,s倒入n,m倒入n,n倒入m,m倒入s...

1495 非常可樂

看題目時萬萬沒想到是bfs 不過這種尋找最少次數的問題確實除了bfs也想不到其他辦法了orz problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要...

hdu 1495 非常可樂

題意 給你三個容器讓你平分可樂,求最少的步數。思路 一看到求最少步數,就想到了廣搜,但是沒有思路,但看別人分情況,瞬間就明白啦。可以s n,s m,n s,n m,m s,m n這六種情況討論就行,每種又有倒完和倒不完兩種情況,直到出現兩個容器都有s 2,這就是最少步數。但s是奇數時是不能平分的,三...