HDU杭電1495 非常可樂 BFS

2021-07-06 08:23:02 字數 1469 閱讀 3260

problem description

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

input

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

output

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

sample input

7 4 3

4 1 3

0 0 0

sample output

no3  

//以前還沒見過這種題也可以用搜尋,看來還是做的題比較少,這是典型的bfs題,我卻在找規律。。。。。

#include #include #include using namespace std;

int s,n,m;

bool vis[101][101][101];//把處理過的狀態都標記,就不會一直走下去

struct cola

;bool judge(cola c)

int bfs(int v,int v1,int v2)

}// v2內有可樂

if(pre.v2)}}

// 如果v1杯子沒有滿,向v1倒可樂

if(pre.v1!=n)//最大容器不可能會溢位可樂 ,但小的容器就會出現這種情況

}if(pre.v2)

else

if(!vis[lst.v][lst.v1][lst.v2])}}

// 如果v2沒有滿

if(pre.v2!=m)

}if(pre.v1)

else

if(!vis[lst.v][lst.v1][lst.v2])}}

}return -1;

}int main()

int ans=bfs(s,0,0);

if(ans==-1) printf("no\n");

else printf("%d\n",ans);

}return 0;

}

杭電1495 非常可樂

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...

hdu 1495 非常可樂

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

hdu 1495 非常可樂

hdu 1495 非常可樂 題目大意 給你三個容器,他們的容量分別是 s,n,m 且s n m,給你s,n,m。s代表裝在容器裡可樂,n和m代表的是兩個杯子的容量,求他們能否平分這杯可樂。如果能就輸出倒的最小次數,如果不能就輸出 no。題目分析 也就是要達到能 s 2,0,s 2或 0 s 2,s ...