題目描述:
大家一定覺的運動以後喝可樂是一件很愜意的事情,但是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是奇數時是不能平分的,三...